檔案編碼的判定(UTF8,UTF16),及轉換

來源:互聯網
上載者:User

 
 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.