#os 为什么 #js #java 选择了 UTF-16 (emoji 占2 codePoint)作为默认编码?
答:UTF-8 codec 要处理的情况大两百行
https://www.fxzhihu.com/question/652839772/answer/3472123259
- UNIX ASCII-7bit 现在一般被扩展为 Latin-1 (EASCII, 8bit), 均可包含 base64 z85
- utf8的兼容ascii只是伪兼容,例如strstr("abc","a")。很多情况utf8根本不能用ascii api? 不。 UTF-8 保证了同一码元,不同字节二进制前缀不同,不会混淆。
- UTF-16比int32(unicode scalar)有啥问题?比如国旗都是用两个 code point 表示的,存储成整数要 8 字节;有些 emoji 还是一个 ZWJ 序列(grapheme clusters), Family 就是七个 code point
答:UTF-8 codec 要处理的情况大两百行
https://www.fxzhihu.com/question/652839772/answer/3472123259
- UNIX ASCII-7bit 现在一般被扩展为 Latin-1 (EASCII, 8bit), 均可包含 base64 z85
- utf8的兼容ascii只是伪兼容,例如strstr("abc","a")。很多情况utf8根本不能用ascii api? 不。 UTF-8 保证了同一码元,不同字节二进制前缀不同,不会混淆。
- UTF-16比int32(unicode scalar)有啥问题?比如国旗都是用两个 code point 表示的,存储成整数要 8 字节;有些 emoji 还是一个 ZWJ 序列(grapheme clusters), Family 就是七个 code point
FxZhihu / Fixup Zhihu
UTF-16为啥取代不了UTF-8? - @Glavo | FxZhihu
之前我也回答过类似的问题,但看到一些人对 UTF-16 有点魔怔了的态度,现在我在这个问题下重说一遍。 因为 UTF-16 更适合在内存中处理字符串,而 UTF-8 更适合传输和存储,以及 UTF-8 与 ASCII 二进制级的兼容带来了一些应用场景,所以他俩并不存在替代关系,都有自己的存在意义。 这个问题下的很多回答我难以苟同。以前我也觉得 UTF-16 缺点很多,但在理解越来越深入之后,我理解了 UTF-16 是一个优秀的折中方案。 我们列举一下…