当我尝试保存文本文件使用记事本中的非英语文本时,我可以选择统一码,Unicode 大端和UTF-8. 这些格式有什么区别?
假设我这么做不是希望获得向后兼容性(与旧版操作系统或应用程序),我确实希望不是关心文件大小,哪种格式更好?
(假设文本除了其他语言外,还可以是中文或日语等语言。)
笔记:从下面的答案和评论来看,在记事本术语中,Unicode 是 UTF-16(Little Endian),Unicode Big Endian 是 UTF-16(Big Endian),UTF-8 就是 UTF-8。
答案1
不知道。哪个更好:锯子还是锤子?:-)
不过,文章中有一些内容与当前主题更相关:
- UTF-8 致力于最小化表示 ASCII 字符集的字节大小(可变长度表示:每个字符用 1 到 4 个字节表示,所有 ASCII 字符都用 1 个字节表示)。正如 Joel 所说:
“看看那些零!”他们说,因为他们是美国人,他们正在看的英语文本很少使用 U+00FF 以上的代码点。他们也是加州的自由嬉皮士,想要节约(冷笑)。如果他们是德克萨斯人,他们不会介意消耗两倍的字节数。但那些加州懦夫无法忍受将字符串所需的存储空间增加一倍的想法
UTF-32 注重详尽性和固定长度表示,所有字符都使用 4 个字节。这是最直接的转换,直接将 Unicode 代码点映射到 4 个字节。显然,它的尺寸效率不高。
UTF-16 是一种折衷方案,大多数时候使用 2 个字节,但扩展为每个字符 2 * 2 个字节来表示某些字符,即未包含在基本多语言平面 (BMP) 中的字符。
答案2
对于欧洲语言来说,UTF-8 较小。对于东方语言来说,区别不是那么明显。
两者都可以处理所有可能的 Unicode 字符,因此兼容性应该没有差别。
答案3
Unicode 字符编码的数量比您想象的要多。
UTF 8
UTF-8 编码的宽度可变,范围为 1-4 个字节,每个字节的高位保留为控制位。第一个字节的前导位表示该字符使用的总字节数。字符代码点的标量值是非控制位的串联。在此表中,
x
表示 Unicode 值的最低 8 位,y
表示下一个较高的 8 位,z
表示高于该值的位。Unicode Byte1 Byte2 Byte3 Byte4 U+0000-U+007F 0xxxxxxx U+0080-U+07FF 110yyyxx 10xxxxxx U+0800-U+FFFF 1110yyyy 10yyyyxx 10xxxxxx U+10000-U+10FFFF 11110zzz 10zzyyyy 10yyyyxx 10xxxxxx
- UCS-16
- UCS-16BE
- UCS-16LE
- UTF-16
- UTF-16BE
- UTF-16LE
- UTF-32
- 统一编码:UTF-32
答案4
文本文件等小文件的唯一真正优势是生成的文件大小。UTF-8 通常生成较小的文件。但对于中文/日文文本,这种差异可能不那么明显。