如何解决在带有亚洲字符的 Javascript TextDecoder 中解码是如何工作的?
let uint8Array = new Uint8Array([228,189,160,229,165,189]);
alert( new TextDecoder().decode(uint8Array) ); // 你好
这个编码是怎么变成亚洲字符的?
据我所知,UTF-8 是 8 位的。因此,如果我查看 utf-8 charset map,那么直到 255 为止我都没有任何亚洲字符。
关于调查比特
- 为输入寻找位
[228,189].map(i => parseInt(i).toString(2))
// ["11100100","10111101","10100000","11100101","10100101","10111101"]
- 寻找输出位
'你好'.split('').map((e,index) => '你好'.charCodeAt(index).toString(2) )
// ["100111101100000","101100101111101"]
对我来说很神秘的事情:
- 输入中的总位数为 48,而输出中的总位数为 30。为什么?
- 位模式在某些地方也匹配,但不完全匹配。就像输入位数组中的第 3 个和第 6 个元素匹配输出位数组。
有什么我遗漏的吗?随时纠正我
解决方法
问完这个问题我觉得有点傻。
通过 UTF-8 RFC 和谷歌进行一些探索。我发现我对UTF-8的理解是错误的。
我以为 UTF-8 最多有 8 位,但那是错误的。
现实中
UTF-8 是一种可变长度编码,每个编码最少 8 位 特点。具有更高代码点的字符最多需要 32 位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。