Node.js错误的UTF8字符串表示法,即使字节码似乎正确

Node.js错误的UTF8字符串表示法,即使字节码似乎正确,node.js,utf-8,base64,Node.js,Utf 8,Base64,经过一段时间的探索,我相信我的问题可能与其他人的问题没有直接关系。我在表单中使用unicode字符(客户端使用angularjs),并注意到UTF8字符串没有正确显示在服务器日志中。因此,我决定在提交到服务器(nodejs/express4)之前在客户端对所有字符串进行base64.5编码。JSON数据正确地到达服务器,但是当我尝试使用缓冲区将其从base64转换为UTF8时,我得到了不同的符号。我在上面测试了字符串,它们解码得很好。有人能告诉我可能做错了什么吗 示例字符:σ,base64=“z

经过一段时间的探索,我相信我的问题可能与其他人的问题没有直接关系。我在表单中使用unicode字符(客户端使用angularjs),并注意到UTF8字符串没有正确显示在服务器日志中。因此,我决定在提交到服务器(nodejs/express4)之前在客户端对所有字符串进行base64.5编码。JSON数据正确地到达服务器,但是当我尝试使用缓冲区将其从base64转换为UTF8时,我得到了不同的符号。我在上面测试了字符串,它们解码得很好。有人能告诉我可能做错了什么吗

示例字符:σ,base64=“z4M=”。 在服务器上,此行将所有JSON值解码为UTF8:

Object.keys(req.body).forEach(函数(key){req.body[key]=newbuffer(req.body[key],'base64').toString('utf8');})

服务器上的“σ”字符变为“Ⅹ”。有人能帮忙吗

因此,我决定在提交到服务器(nodejs/express4)之前在客户端对所有字符串进行base64.5编码

没必要,真的。也许你用utf-8JSON做的错事现在也错了。 试着调试一下

注意到UTF8字符串没有正确显示在服务器日志上

他们展示了什么? 你在什么操作系统上? 你用十六进制查看器查看日志了吗


对我来说,这看起来像是一个典型的“我有一个问题X,想了一半我的解决方案,但我被一个子问题Y卡住了”。返回X并以正确的方式攻击它(无base64)。

您如何知道它在服务器上变为“O”?你打印出来了吗?去哪里?我控制台.log()几乎什么都可以。但这与屏幕编码无关(反正设置为UTF8),因为我使用了.charCodeAt()来验证字符代码是否正确(03C3)。但是,node将其视为“O”。谢谢您的回答。从源代码重新编译NodeJ后,字符现在正常显示。然而,两个二进制相等字符串在客户端和服务器端生成不同的hmac密钥。我不确定这是否是因为hmac图书馆。仍在调试。。。