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