【发布时间】:2020-09-18 21:52:43
【问题描述】:
我的问题很简单。从一个不在基本多语言平面中的字符开始,比如var original = "????" 或等效的
var original=`\u{1f3ae}`
Javascript 通过 UTF-16 编码将此字符串存储在内存中。不幸的是,您将字符串提供给某些数据库/应用程序(细节无关)并且它错误地将 UTF-16 字节解释为 UTF-8 字节,并且当您从数据库/应用程序中读出字符串时,它实际上给您的正是
var switchedEncoding = Buffer.from(original, 'utf16le').toString('utf8')
如果您在这种情况下登录switchedEncoding,您会得到<خ�。不好。好的,所以您尝试将其切换回来:
var switchedBack = Buffer.from(switchedEncoding,'utf8').toString('utf16le')
如果您在这种情况下登录 switchedBack,您会得到 �붿 而不是 ????。无赖。
另一方面,如果您的原始字符串在 BMP 中,switchedBack 可以很好地恢复原始字符串。我的问题是信息是否会因应用程序/数据库的错误解码而不可逆转地丢失?如果没有,我想要一个聪明的函数,即使是星光层中的角色也可以反转它。
感谢您的帮助!
【问题讨论】:
标签: node.js encoding utf-8 utf-16 utf