Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么某些字符出现';破损';在JS console.log中?_Javascript_Node.js_Vim_Unicode_Ascii - Fatal编程技术网

Javascript 为什么某些字符出现';破损';在JS console.log中?

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', '') 该文件包含以相同方式显示的不

我正在下载一个javascript文件,它包含一些特殊字符,例如,如果我在vim或更低版本中打开它,我会看到一行包含
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