1

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

A、UTF-16编码782字节
B、UTF-16编码784字节
C、UTF-8编码1173字节
D、UTF-8编码1176字节
E、以上
都不是正确答案?为什么?

4

2 回答 2

2

TL;博士

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

详细地

在 UTF-8中,所有 ASCII 字符(值 0 到 127)对应一个字符

似乎大多数“常见”CJK 字符使用 3 个字节,尽管不太常见的 CJK 字符可能需要完整的 4 个字节进行编码。当然,这取决于您的操作系统是否需要字节顺序标记

因此,例如,如果 391 个字符段落中的所有字节都是普通汉字并且没有 BOM,则 UTF-8 应该是 1173 个字节。对于 BOM,这将是 1176 字节。

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

UTF 16 几乎总是有一个 2 字节字节顺序标记(FE FF 或 FF FE)——即 784 字节。

FWIW,您提供的 6 个字符(兰亭集序行书)都在 BMP 上 -在这里查看

于 2012-09-21T14:52:44.057 回答
1

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

于 2012-09-21T13:43:39.640 回答