Javascript 为什么某些字符出现';破损';在JS console.log中?
我正在下载一个javascript文件,它包含一些特殊字符,例如,如果我在vim或更低版本中打开它,我会看到一行包含Javascript 为什么某些字符出现';破损';在JS console.log中?,javascript,node.js,vim,unicode,ascii,Javascript,Node.js,Vim,Unicode,Ascii,我正在下载一个javascript文件,它包含一些特殊字符,例如,如果我在vim或更低版本中打开它,我会看到一行包含caf,其中是一个特殊字符的十六进制值 如果您查找E9的十六进制值,它是café,因此整行是café,但是如果我在那行上执行console.log,我不会得到café,而是得到café�。为什么会这样 我如何替换那个奇怪的值�与é?这些似乎都不起作用 line.replace(/\x92/g, '') line.replace('\x92', '') 该文件包含以相同方式显示的不
caf
,其中
是一个特殊字符的十六进制值
如果您查找E9的十六进制值,它是café
,因此整行是café
,但是如果我在那行上执行console.log
,我不会得到café
,而是得到café�代码>。为什么会这样
我如何替换那个奇怪的值�代码>与é
?这些似乎都不起作用
line.replace(/\x92/g, '')
line.replace('\x92', '')
该文件包含以相同方式显示的不同十六进制字符(特殊的单引号和双引号)。为什么他们会出现在第一位这样,我如何才能修复他们
一些额外的信息可能会有所帮助:当我在vim中打开文件时,它在底部显示[converted]
。显然,这意味着它将fileencoding
vim属性的值(即latin1
)转换为encoding
vim属性的值(即utf-8
)
使用parseInt转换为十进制,然后获取字符代码。要转换回字符,请执行以下操作:
parseInt((é).charCodeAt(0), 16) <==== doesn't work check out the link below
parseInt((é).charCodeAt(0,16)如何将这些奇怪的字符转换回它们的“正常”版本?知道是什么导致了这一点吗?我添加了一个MDN链接,解释了转换回的问题,那里有一个代码解决方案可以帮助解决。这只有在有问题的文件作为ISO-8559-1提供时才有效。如果文件包含卷引号,则编码可能是windows-1252,此方法将失败。@roeland当我使用file
命令计算文件的编码时,它会显示非ISO扩展ASCII文本,带有很长的行。下载文件时,我应该对此文件使用什么编码?我知道该文件还包含卷引号(例如,在vim中显示为
),所以您说latin1
编码会失败?如果我想尝试windows-1252,我会设置什么代码作为编码?从最近我能看到的是win1251
,它是对的吗?没有办法确定。通常,web服务器在内容类型
标题中为您提供编码。请注意,卷曲引号“
是U+201C,而U+0092是一个控制字符。字节0xE9本身在UTF-8中不是有效字符,这就是为什么vim不将其显示为“é”。在UTF-8中表示“é”需要两个字节:0xC3 xA9。要将0xE9视为“é”,需要下载具有不同编码的文件,如拉丁1。
parseInt((é).charCodeAt(0), 16) <==== doesn't work check out the link below