Javascript Node.js缓冲区编码问题
我无法理解node.js中的字符编码。我正在传输数据,由于某种原因,编码会导致某些字符被其他字符替换。我所做的是在客户端进行base64编码,然后在node.js中对其进行解码 为了简化,我将其缩小为以下失败代码:Javascript Node.js缓冲区编码问题,javascript,node.js,character-encoding,base64,buffer,Javascript,Node.js,Character Encoding,Base64,Buffer,我无法理解node.js中的字符编码。我正在传输数据,由于某种原因,编码会导致某些字符被其他字符替换。我所做的是在客户端进行base64编码,然后在node.js中对其进行解码 为了简化,我将其缩小为以下失败代码: new Buffer("1w==", 'base64').toString('utf8'); 1w==是×字符的基64编码。现在,当使用'base64'参数将此字符串传递到缓冲区,然后执行.toString('utf8')时,我希望返回相同的字符,但我没有。相反,我得到了�(字符代
new Buffer("1w==", 'base64').toString('utf8');
1w==
是×
字符的基64编码。现在,当使用'base64'
参数将此字符串传递到缓冲区,然后执行.toString('utf8')
时,我希望返回相同的字符,但我没有。相反,我得到了�代码>(字符代码65533
)
编码utf8
是否错误?如果是,我应该用什么来代替?如果不是,我如何解码node.js中的base 64字符串?不,您的假设是错误的。base64编码字符串显然只编码了一个字节。而U+007F以上的所有Unicode代码点至少需要两个字节才能用UTF-8编码
我仍然不擅长在头脑中解码base64,但请尝试ISO-8859-1
关键是,base64解码将字符串转换为字节字符串。您假设它解码为字符串,但这是错误的。您仍然需要将字节字符串编码为字符串,在您的情况下,正确的编码是ISO-8859-1
echo -n x | base64
给予
如果编码正确,给定的代码将给出预期的答案。问题可能出在编码方面。(1w==转换为字节0xD7,它将是多字节UTF-8字符的开头)我将编码从utf8
更改为binary
,它只使用单个字节。文档说这是一个不推荐使用的功能,但目前它还可以使用。谢谢。当解释为ISO 8859-1时,字节序列\0xD7
成为字符序列U+00D7
,即×
,如问题所述。不要仅仅因为它看起来相似就被x
所迷惑。区别在于:×x×x×x×x
。
eA==