2017-01-23 34 views
3

我正在用javascript下載文件,它包含一些特殊字符,例如,如果我在vim或更低版本中打開它,我會看到一行包含caf<E9>,其中<E9>是一個特殊字符十六進制值。爲什麼某些字符在JS console.log中出現'破碎'?

如果您查找的十六進制值E9是é,所以整機線條café,但如果我在這一行做了console.log,我沒有得到café但我得到caf�。爲什麼會這樣?如何將替換爲é?這些似乎都不起作用。

line.replace(/\x92/g, '') 
line.replace('\x92', '') 

該文件包含出現同樣的方式不同的十六進制字符(特殊單,雙引號)。爲什麼他們首先會出現這種情況,我該如何解決這些問題?

一些額外的信息可能會有所幫助:當我在vim中打開文件時,它在底部顯示[converted]。顯然這意味着它將其從fileencoding vim屬性(即latin1)的值轉換爲encoding vim屬性(即utf-8)的值。

+1

字節單獨0xE9不是UTF-8的有效字符,這是爲什麼VIM沒有顯示爲「E」要用UTF-8表示「é」,它需要兩個字節:0xC3 xA9。要將0xE9視爲「é」,您需要使用不同的編碼下載文件,如latin1。 –

回答

3
console.log(String.fromCharCode(parseInt(0xe9,10))) 

使用parseInt轉換爲十進制,然後獲取字符代碼。將字符轉換回來:

parseInt((é).charCodeAt(0), 16) <==== doesn't work check out the link below 

MDN有一個擴展charCodeAt以涵蓋多語言字符的方法。看看這個鏈接的代碼和示例:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt

+0

我怎麼能將這些奇怪的角色轉換回他們的「正常」版本?任何想法是什麼造成這個開始? – user779159

+0

我添加了一個鏈接到MDN,解釋了轉換回來的問題,那裏有一個代碼解決方案可以幫助。 –

+1

這僅適用於將相關文件作爲ISO-8559-1提供服務。如果該文件包含捲曲引號,則編碼可能是windows-1252,並且此方法將失敗。 – roeland

相關問題