fopen以UNICODE(UTF-8)格式打開一個文件


windows下利用標准庫fopen以UTF-8格式打開一個文件,要注意下面幾個問題.

1.如果文件編碼為UNICODE(UTF-8),有兩種情況:
1)沒有BOM頭,調用fopen必須指定css=UTF-8.
2)有BOM頭,調用fopen不要指定css=UTF-8.
2.文件編碼為其它格式(如ANSI),調用fopen必須指定css=UTF-8.

fopen打開其它UNICODE(如UTF-16LE,UNICODE)等,與此類似,只是BOM頭不相同.
例如
記事本中如果保存編碼格式為Unicode big endian,則無法使用 ccs=UNICODE 這個功能
如果用了ccs=UNICODE,則必須使用寬字符格式的相應函數,即便文件本身編碼是ANSI格式

參考下面兩篇文章:
VC2005中fopen的ccs=UNICODE實測<zt> + UTF8 如何轉變為 ansi
windows系統中utf-8格式文本

附:

BOM(Byte Order Mark),是UTF編碼方案里用於標識編碼的標准標記,在UTF-16里本來是FF FE,變成UTF-8就成了EF BB BF。這個標記是可選的,因為UTF8字節沒有順序,所以它可以被用來檢測一個字節流是否是UTF-8編碼的。微軟做這種檢測,但有些軟件不做這種檢測,而把它當作正常字符處理。
微軟在自己的UTF-8格式的文本文件之前加上了EF BB BF三個字節, windows上面的notepad等程序就是根據這三個字節來確定一個文本文件是ASCII的還是UTF-8的, 然而這個只是微軟暗自作的標記, 其它平台上並沒有對UTF-8文本文件做個這樣的標記。
也就是說一個UTF-8文件可能有BOM,也可能沒有BOM,那么怎么區分呢?三種方法。1,用UltraEdit-32打開文件,切換到十六進制編輯模式,察看文件頭部是否有EF BB BF。2,用Dreamweaver打開,察看頁面屬性,看“包括Unicode簽名BOM”前面是否有個勾。3,用Windows的記事本打開,選擇“另存為”,看文件的默認編碼是UTF-8還是ANSI,如果是ANSI則不帶BOM。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM