2011-08-02 115 views
3

我无法理解node.js中的字符编码。我正在传输数据,出于某种原因,编码会导致某些字符被其他字符替换。我正在做的是在客户端进行base64编码并在node.js中对其进行解码。Node.js缓冲区编码问题

为了简化,我将范围缩小到这段代码失败:

new Buffer("1w==", 'base64').toString('utf8'); 

1w==×字符的基64编码。现在,当将这个字符串与'base64'参数传递给一个缓冲区,然后做.toString('utf8')我希望得到相同的字符,但我没有。相反,我得到了(字符代码65533)。

编码utf8错?如果是这样,我应该用什么来代替?如果不是,我如何解码node.js中的base 64字符串?

回答

4

不,你的假设是错误的。 base64编码的字符串显然只有一个字节编码。并且U + 007F上方的所有Unicode码位都需要至少两个字节才能以UTF-8编码。

我仍然不擅长解码base64,而是尝试使用ISO-8859-1。

重点是,base64解码将字符串转换为字节字符串。你认为它解码为一个字符串,但这是错误的。您仍然需要将字节字符串编码为字符串,在您的情况下,正确的编码是ISO-8859-1。

+0

我将编码从'utf8'改为'binary',它只使用单个字节。文档说这是一个弃用的功能,但现在它的工作。谢谢。 – pimvdb

0
echo -n x | base64 

eA== 

给定的代码会得到所需要的答案,如果编码是正确的。这个问题可能在编码方面。 (1w ==翻译为字节0xD7,这将是多字节UTF-8字符的开始)

+0

当解释为ISO 8859-1时,与问题中一样,字节序列'\ 0xD7'变成字符序列'U + 00D7',它是'×'。不要被'x'弄糊涂,只是因为它看起来很相似。以下是区别:'×x×x×x×x'。 –