为什么将32字节的ASCII文本文件转换为Unicode时变成66字节?

时间:2018-09-19 00:48:35

标签: file unicode ascii utf-16 notepad

在Windows记事本中创建并以ASCII保存的32个字符的文本文件,其大小为32个字节。当以Unicode保存相同的32个字符的文本时,大小增加到66个字节。

为什么16位Unicode字符的大小是ASCII字符的两倍,所以大小不能为64个字节?

1 个答案:

答案 0 :(得分:2)

Unicode只是一个字符集,并且没有16位字符,因为它不是一组未存储在任何地方的字符映射。为了表示Unicode,有UTF-8,UTF-16和UTF-32以及许多其他具有不同代码单元大小的编码。 Unicode不能用16位来表示,因为它是21位的字符集。

在不知道原始文件内容的情况下,如果它包含纯ASCII(即仅代码点在128以下),则是由于byte order mark (BOM) U+FEFF引起的。当您在记事本中保存文件时选择“ Unicode”时,它实际上是UTF-16LE,并将在开始时嵌入2字节BOM(0xFF 0xFE)以指示文件的编码,将文件的大小增加到66。记事本只是令人困惑。实际上,如果在U + FFFF下面输入任何文本并另存为UTF-16,也会发生相同的情况。如果您将纯ASCII文件另存为UTF-8,则由于3字节BOM,该长度现在将为35字节

必读:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)