Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 Node.js缓冲区编码问题_Javascript_Node.js_Character Encoding_Base64_Buffer - Fatal编程技术网

Javascript 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')时,我希望返回相同的字符,但我没有。相反,我得到了�(字符代

我无法理解node.js中的字符编码。我正在传输数据,由于某种原因,编码会导致某些字符被其他字符替换。我所做的是在客户端进行base64编码,然后在node.js中对其进行解码

为了简化,我将其缩小为以下失败代码:

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==