1.首先根據bom來判定
utf-8的bom: ef bb bf; 對應的十進位制數值是:239 187 191 如果檔案的開頭三個位元組與之相符則說明檔案的編碼是utf8的
utf-16le的bom: ff fe; 對應的十進位制數值是: 255 254 如果檔案的開頭兩個位元組與之相符則說明對應的編碼是utf-16le
utf-16be的bom: fe ff ; 對應的十進位制數值是:254 255 如果檔案的開頭兩個位元組與之相符則說明對應的編碼是utf-16be
2.bom不存在的情況判定
utf-8的判定,根據內容判定
utf-8的編碼規則:
字元位元組長度 標誌位元組 值
一位元組長 0******x
兩位元組長 110***xx 10******
三位元組長 1110***x 10****** 10******
四位元組長 11110*** 10****** 10****** 10******
**標誌位元組判定用到的資料**
定義陣列bthead 長度為4儲存用來判定標誌位元組的十進位制數值: 0,192, 224, 240
定義陣列btbitandvalue 長度為4儲存用來得到標誌位元組長度的十進位制數值:128: 224, 240, 248
**值判定用到的資料**
定義變數btvaluehead用來儲存值得標誌所對應的十進位制數值:128
定義變數btfixvalueand 儲存用來取得值的標誌的十進位制數值:192
a.以位元組方式讀取檔案中內容儲存到位元組陣列中
b.對a中讀取的檔案內容做loop操作。
首先對當前的位元組分別與btbitandvalue中的四個值進行位與操作,每次得到的值與bthead中的值比較,找到相等的值時可以根據當前的 值來判定字元的位元組長度l。並執行下乙個迴圈,在跳過b的操作次數(l - 1)次時在執行b操作
c.取得值的標誌。 將此致的值與btfixvalueand進行位與操作,將取得的值與btvaluehead進行比較,如果相等則對下乙個位元組繼續執行c操作,直到執行的次數是l-1次。如果不相等則說明不是utf-8編碼格式。
utf-16的判定與utf-8的判定類似只要知道編碼規則就可以。
3. 文字code的轉換操作
轉換操作用到的api:
多位元組轉寬位元組:multibytetowidechar
寬位元組轉多位元組:widechartomultibyte
msdn有詳細引數說明。
具體步驟: 首先判定要儲存轉換結果字串的長度,相應引數設定成固定的值便可以得到。
其次,根據得到的長度分配儲存變數
最後,進行轉換。
注意分配的記憶體釋放問題。
介紹utf8編碼
utf8並不算是一種電腦編碼,而是一種儲存和傳送的格式,如前所述,每個unicode ucs字元都以 2或4個bytes來儲存,看看以下的比較 以 i am chinese 為例 用ansi儲存 12 bytes 用unicode ucs2儲存 24 bytes 2 bytes header 用uc...
UTF8編碼 解碼
參考文件 rfc3629標準.對於任意乙個字,都可以用乙個唯一碼 unicode碼,由標準編制 表示,在應用過程中,需要對碼進行編碼.常用的編碼方式為utf 8.utf 8採用類似於ip位址分配的機制.即對於不同範圍的unicode碼,採用不同的模板進行編碼.流程概述為 2.1 查表獲取unicod...
utf8的編碼演算法
unicode字符集是我們世界上最完善最全面的字符集,幾乎包含了世界上所有的字元。其實可以這麼理解,unicode字符集是一張巨大的 把世界上各種語言的字元和標點符號都編排到裡面,然後按照一定的順序給每個字元排號 很遺憾的是對於中文來說,這個順序不是按照漢語拼音的順序 有了這張巨大的 世界上大部分字...