如何使用不同的编码代码确定文件大小?

时间:2012-09-21 13:38:38

标签: utf-8 computer-science utf-16

兰亭集序(兰亭集)是中国文学史上“行书”的佼佼者。最引人入胜的一句话就是“我知道说生死是一回事是谎言,长寿和早逝没有区别唉!”通过计算整个内容的字符(中文版),结果应为391(包括标点符号)。对于写入文本文件的这些字符,请选择可能的文件大小而不会损坏任何数据。

A,UTF-16编码中的782字节
B,UTF-16编码的784字节
C,1170字节,UTF-8编码
D,UTF-8编码中的1176字节
E,以上都不是
哪个是正确的答案?为什么?

2 个答案:

答案 0 :(得分:2)

TL; DR

正如Panic上校指出的那样,你需要对391个字符段落中的每个字符进行详细分析才能真正解决这个问题。但看起来你的考官有一种非常邪恶的幽默感 - 所有4个答案都可以说是正确的,假设所有的字符都符合BMP并且取决于是否使用了BOM。你最好的办法是寻找一个不在BMP上的不常见的角色,它会将UTF8和UTF16推向另一个转义序列,在这种情况下,答案就是上述情况。

详情

In UTF-8所有ASCII字符都有一个字符(值0到127)

似乎MOST'常见'CJK字符使用3个字节,尽管较不常见的CJK字符可能需要完整的4个字节进行编码。 当然,这取决于您的操作系统是否需要Byte Order Markers

所以,例如如果391字符段落中的所有字节都是 common 中文字符且没有BOM,则UTF-8应为1173字节。使用BOM时,这将是1176个字节。

在UTF-16中,似乎大多数常见的CJK字符都在Basic Multilingual Plane上,因此只需要2个字节来编码每个字符。即391 * 2 = 782。

UTF 16几乎总是有一个2字节Byte Order Marker(FE FF或FF FE) - 即784字节。

FWIW,你提供的6个字符(兰亭集序行书)都在BMP上 - check here

答案 1 :(得分:1)

需要更多信息。 UTF-8和UTF-16(但不是UTF-32)都是可变宽度编码。在UTF-8中,一些字符被编码为单个8位字节(八位字节),其他字符则需要多达四个八位字节。