2011-04-29 63 views
3

如何區分UTF-8(無BOM)和ASCII文件?如何區分UTF-8和ASCII文件?

+0

http://stackoverflow.com/questions/1031645/how-to-detect-utf-8-in-plain-c – 2011-04-29 10:21:15

+2

所有的ASCII文件也是UTF-8文件。 :) – tchrist 2011-04-29 13:40:51

+0

Duplicate:http://stackoverflow.com/questions/4907942/detecting-text-file-type-ansi-vs-utf-8 – 2011-04-30 19:35:55

回答

5

如果文件包含設置了最高位的任何字節,則它不是ASCII。

所以如果唯一的可能性是ASCII或UTF-8,那麼它是UTF-8。

如果文件只包含頂部位清零的字節,則區分它是ASCII還是UTF-8是沒有意義的,因爲它無論如何都表示完全相同的一系列字符。但你可以稱之爲ASCII。

當然,這並不區分UTF-8與ISO Latin或CP1252,也沒有確認所謂的UTF-8實際上是否有效。

+1

在文件不包含高字節的情況下,將其稱爲「ASCII」可能值得 - 例如,當給它一個MIME類型。這將確保可能不知道「UTF-8」含義的傳統郵件系統仍然能夠接受純ASCII傳輸。 ;-) – 2011-05-02 01:50:15

+0

另請注意,如果您確實將文件解析爲有效的UTF-8,則可以高度確定該文件實際上是否被解釋爲UTF-8。當被解釋爲遺留代碼頁數據時,UTF-8多字節序列的性質幾乎肯定是無稽之談。 – 2011-05-02 01:52:46

+0

是的,這就是我的意思 - 你可以把它稱爲ASCII,而如果設置了任何高位,那麼你*不能稱它爲ASCII。如果沒有設置高位,那麼毫無意義的是說它是ASCII *而不是* UTF-8 - 無論它最初是否打算成爲UTF-8,實際上它現在可以被視爲並且可以被視爲這樣包括通過UTF-8解碼器運行它。我可能不是很清楚。 – 2011-05-02 11:35:13