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的編碼規則:
字元位元組長度 標誌位元組 值
一位元組長 0XXXXXXX
兩位元組長 110XXXXX 10XXXXXX
三位元組長 1110XXXX 10XXXXXX 10XXXXXX
四位元組長 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
**標誌位元組判定用到的資料**
定義數組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有詳細參數說明。
具體步驟: 首先判定要儲存轉換結果字串的長度,相應參數設定成固定的值便可以得到。
其次,根據得到的長度分配儲存變數
最後,進行轉換。
注意分配的記憶體釋放問題。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/yinzhiqing/archive/2009/11/18/4825789.aspx