2012-08-17 67 views
0

我有一個xml文件,其中包含En Dash和Em Dash字符作爲元素文本的一部分。他們正在轉換爲UTF-8編碼如下。使用JavaScript在xml中使用JavaScript讀取UTF-8十六進制代碼

<TextValue>This is an En Dash: \xE2\x80\x93 This is an Em Dash: \xE2\x80\x94.</TextValue> 

我想使用JavaScript來解決這些UTF-8十六進制代碼,並與任何自由文本我要取代它們。

任何人都可以建議做到這一點?我試圖使用正則表達式,但無法解析這些代碼。儘管我可以使用RegEx解決任何其他文本。

謝謝。

+1

您是否控制了XML?因爲我不認爲'\ xE2'符號是一個很好的XML事物。這些字符(如果不是原始字節)的正確XML編碼分別是'&#x2013;'和'&#x2014;'。但是如果你被這個XML困住了,我想你會需要一些定製的解析/解碼。 – Sodved 2012-08-17 05:06:15

+0

我不能控制那個xml。我正在從上游系統接收它。所以我需要接受它並操縱我自己。 – 2012-08-17 05:07:31

+0

也許你的編輯器搞砸了,一切都很好? – nalply 2012-08-17 05:10:43

回答

1

DEMO

var text = "<TextValue>This is an En Dash: \xE2\x80\x93 This is an Em Dash: \xE2\x80\x94.</TextValue>" 

var fromArr = ["\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93", "\xe2\x80\x94", "\xe2\x80\xa6"], 
    toArr = ["'", "'", '"', '"', '-', '--', '...']; 

    for (var i=0;i<fromArr.length;i++) { 
     text = text.replace(fromArr[i],toArr[i],"g") 
    } 
     alert(text) 

更改爲

var fromArr = ["\xe2\x80\x93", "\xe2\x80\x94"], toArr = [ '-', '--']; 

,如果你不需要smartquotes省略號

結果:

enter image description here

+0

我看到這個:這是一個恩短跑:?這是一個Em Dash:?。 2012-08-17 05:31:58

+0

你也可以解釋爲什麼你有這麼多的數組條目只是爲了替換兩個令牌嗎? – 2012-08-17 05:32:58

+0

只需刪除那些你不需要的。我發現可能出現在您的代碼中的令牌列表 – mplungjan 2012-08-17 05:34:25

0

我終於通過閱讀UTF-8消息的正文,並使用以下行代替unicodes。

body = body.replace(/\u00E1/g,"a"); //LATIN SMALL LETTER A WITH ACUTE 
body = body.replace(/\u00E2/g,"a"); //LATIN SMALL LETTER A WITH CIRCUMFLEX 
body = body.replace(/\u00E3/g,"a"); //LATIN SMALL LETTER A WITH TILDE 
body = body.replace(/\u201D/g,"\""); //RIGHT DOUBLE QUOTATION MARK 
body = body.replace(/\u201C/g,"\""); //LEFT DOUBLE QUOTATION MARK 
body = body.replace(/\u2424/g," "); //NEW LINE \n 
body = body.replace(/\u000D/g," "); //CARRIAGE RETURN \r 
+0

我的代碼也以您的格式使用unicodes – mplungjan 2012-08-28 06:15:32

相關問題