字符编码问题
1.在中文系統下,ANSI就是GB2312編碼;unicode是萬國符,一個符號由兩個字節表示,設置可視化字體時一般都要轉換成unicode;utf-8是unicode的一種實現方式?一個字符的
字表示需要1到4個字節不定長
2.在字符串前加一個L作用: 如 L"我的字符串" 表示將ANSI字符串轉換成unicode的字符串,就是每個字符占用兩個字節。 sizeof("asd") = 3; sizeof(L"asd") = 8;_T宏
可以把一個引號引起來的字符串,根據你的環境設置,使得編譯器會根據編譯目標環境選擇合適的(Unicode還是ANSI)字符處理方式 如果你定義了UNICODE,那么_T宏會把
字符串前面加一個L。這時 _T("ABCD") 相當于 L"ABCD" ,這是寬字符串。 如果沒有定義,那么_T宏不會在字符串前面加那個L,_T("ABCD") 就等價于 "ABCD"
3.要想從一個配置文件中讀字符并顯示出來,讀的編碼格式和顯示的編碼格式都要正確,否則就可能造成亂碼
4.從一個xml配置文件中讀取數據時,雖然有這么一句<? xml encoding="***" ?>,但是xml解析器很大可能并不是按encoding后的編碼格式來讀取,網上查找資料后顯示讀取規
則如下
(1.如果文擋有BOM(字節順序標記,一般來說,如果保存為unicode格式,則包含BOM,ANSI則無),就定義了文件編碼(另存為文件時,選擇的編碼格式)。
(2.如果沒有BOM,就查看XML encoding聲明的編碼屬性。
(3.如果上述兩個都沒有,就假定XML文擋采用UTF-8編碼
!!!但是,實際測試后所有的情況是,不管有沒有BOM(不太清楚BOM,但試了帶BOM utf-8和無BOM utf-8),xml解析器讀取數據的格式是按照這個xml文件保存的編碼格式讀取
的,比如新建一個文檔往其中寫入xml數據,因為中文環境下文檔默認以ANSI編碼格式保存,則xml解析器就會將"視頻"這兩個字在內存中保存為 "ca d3 c6 b5".而如果把文檔
改為utf-8格式,"視頻"讀到內存中就為"e8 a7 86 e9 a2 91 22"
總結,在保存文檔時,盡量用notepad這種工具直接將文檔保存為想要解析xml數據的編碼格式(即和encoding="***"一樣);論壇推薦文件格式最好為utf-8 無BOM
轉載于:https://www.cnblogs.com/wangshaowei/p/8570025.html
總結
- 上一篇: 移动端banner css3(@keyf
- 下一篇: 霍金:人工智能或是人类历史上最后事件