将星形字符的UTF16转换为UTF8转换

问题描述 投票:1回答:1

我的问题很简单。从不在多语言基本平面中的字符开始,例如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将该字符串存储在内存中...

node.js encoding utf-8 utf-16 utf
1个回答
1
投票
答案如下。我可以获取数据库(leveldb)以将内容读出到缓冲区中,然后使用以下方法通过节点中的iconv包进行操作:
© www.soinside.com 2019 - 2024. All rights reserved.