2017-01-23 33 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

相关问题