我的问题很简单。从不在多语言基本平面中的字符开始,例如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
可以很好地恢复原始字符串。我的问题是,应用程序/数据库进行的错误解码是否会导致信息不可逆转地丢失?如果没有,我想要一个聪明的函数,即使对于星体平面中的字符也可以将其反转。
感谢您的帮助!
我的问题很简单。从不在基本多语言平面中的字符开始,比如说var original =“🎮”或等效地var original =`\ u {1f3ae}`Javascript将该字符串存储在内存中...
iconv
包进行操作: