2012-09-21 55 views
1

蘭亭集序是中國文學史上「行書」的頂峯。最令人着迷的一句話是:「我知道說生死是同一件事,而且長壽和早逝並沒有什麼區別,唉!」通過計算整個內容的字符(中文版),結果應該是391(包括標點符號)。對於寫入文本文件的這些字符,請選擇可能的文件大小而不會有任何數據損壞。在UTF-16編碼如何確定具有不同編碼的文件大小?

A,782字節
B,784字節UTF-16編碼
C,以UTF-8編碼1173個字節
d,以UTF-8編碼
ë1176個字節,以上都不是
哪個是正確答案?爲什麼?

回答

2

TL; DR

恐慌上校指出的,你需要做的391字符段的每個字符的詳細分析實際工作這一點。但是看起來你的審查員有一種非常邪惡的幽默感 - 假設所有字符都適合BMP並取決於BOM是否被使用,所有4個答案都可以證明是正確的。你最好的辦法是尋找一個不常見的字符,它不在BMP上,這會將UTF8和UTF16都推送到一個額外的轉義序列,在這種情況下,答案就不是上面的答案。

詳細

In UTF-8會有所有ASCII字符(值從0到127)

一個字符,並且似乎大多數「共同」 CJK字符使用3個字節,儘管不太常見CJK字符可能需要全部4個字節進行編碼。 當然,這取決於您的操作系統是否需要Byte Order Markers

因此,例如,如果391個字符段落中的所有字節都是通用漢字且沒有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

需要更多信息。 UTF-8和UTF-16(但不是UTF-32)都是可變寬度編碼。在UTF-8中,一些字符被編碼爲一個8位字節(一個八位字節),其他字符需要多達四個八位字節。

+1

從我的角度來看,由於每個漢字至少要編碼兩個字節,如果使用UTF-16,它應該是391 * 2 = 782?當談到UTF-8時,我完全不知道如何計算它。 – Carl

相關問題