天天看點

跨平台utf8轉碼unicode研究實作(1)

本方法可以實作把UTF-8格式檔案轉成标準的Unicode格式檔案。由于自己碰到過DataBase為UTF-8格式的檔案,首先要轉成Unicode格式的檔案,是以最後用UE啊,記事本啊,UE的Relpace啊才能轉成标準的Unicode檔案。最後自己在沒有事的時候,就想寫一個這樣的Tool.

一.UTF-8編碼原理:

    标準的UTF-8是有一個頭(是EF BB BF)和Unicode有一個(FF FE頭一樣),每一個字可以由一個byte(如:英文字母、數字),也可以由二個byte(如:泛歐語系、斯拉夫語字母),也可以由三個byte組成(如:漢字)。一般由四個byte組成的字很少很少。UTF-8編碼模闆如下:

UCS-4 range (hex.) UTF-8 octet sequence (binary)

0000 0000-0000 007F 0xxxxxxx

0000 0080-0000 07FF 110xxxxx 10xxxxxx

0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

從這個頭之後的第一個byte,如果是0xxxxxxx形式,就說明這個字隻有一個byte組成,如果是110xxxxx形式就說明這個字有二個byte組成,如果是1110xxxx形式就說明有三個byte組成,如果是11110xxx就說明有四個byte組成。

二 程式實作:

   (一)算法:首先判斷這個UTF-8有沒有頭(EF BB BF),沒有從第一個byte開始處理,有頭就跳三個byte,讀到真正的内容。沒有的話,第一個byte就是真正的内容。再把讀到的第一個byte分析成(0000 0000---1111 1111)和UTF-8編碼格式相比較,得出這個真正的字有幾個位。如果是隻有一個byte(格式為0xxxxxxx),直接就把這個字元以寬字元寫進檔案就行了。如果是二byte(格式為110xxxxx),我們就要算出xxxxx處的值,再讀一個byte得到10xxxxxx也同樣要算出xxxxxx,把這兩個連在一起xxxxx和xxxxx組成一個二進制數,得到這個二進數的十進制值,再以寬字元寫進檔案就行了。如果是有三位(格式為1110xxxx),要再讀兩個byte得到10xxxxxx和10xxxxxx,把這xxxx 和xxxxxx和xxxxxx連在一起組成二進制數,把他再轉成十進制,把這個值以寬字元寫進檔案。同理例推。