WindowsPhone的中文GB2312、GBK編碼與Unicode相互轉換
網上有高人做的GB2312與Unicode相互轉換的類或者程式集,大家去找找看。但是GB2312是比較老的標準,覆蓋漢字6763個和非漢字圖形字元682個。不是太夠用,只能用GBK(覆蓋漢字21003個、符號883個)。但找了老半天,網上沒有現成的GBK與Unicode相互轉換的程式集。遂,只能自己寫了,現無私分享給大家。
思路:首先明確一點:Unicode只相容ASCII碼。所以,沒有任何演算法函式能表示GBK和Unicode的相互關係。那怎麼辦嘞?作業系統不是可以轉換麼?它是用得什麼辦法。就是最蛋疼的查表法。說的明白一點GBK轉Unicode就是用陣列的下標表示GBK的編碼,用陣列的值表示Unicode的編碼。這就一一對應了。反之Unicode轉GBK亦然,大家自己去思考。
一.GBK編碼是雙位元組(16bit),也就是說能表示2的16次方(65535)個編碼,而GBK的所覆蓋的字元只有21886。做簡單的方法就是弄個65535大小的陣列,其中零零散散地分佈著21886個有效GBK字元編碼,這太浪費資源了。需進行適當優化。
接下來,請看,GBK中第一個中文字元編碼為十六進位制0x8140,最後一個編碼為0xFEFE。0xFEFE-0x8140+0x0001=0x7DBF=32191。好了,縮減了區間,大約就是大小為32191的陣列零零散散的分佈著21886個有效GBK字元編碼。所需空間減少了一半。但是還浪費了大約10000左右的空間,但是沒辦法了GBK編碼太零散了。優化到這一步GBK轉Unicode編碼就完啦。
二.Unicode編碼也是雙位元組,首先,Unicode編碼只相容ASCII編碼,與其他編碼完全不相容。且,Unicode編碼中把中文簡體、繁體、日語、韓語列在同一大塊區域。沒有規律。完全找不到Unicode中文字元和GBK中文字元之間的函式對映。遂,也只能用查表法。
最簡單的像上文那樣弄個大小為65535的陣列,當然也是浪費空間,也需要優化。GBK中的那些中文字元零散地分佈在Unicode編碼中6大塊區域
。分別為
//0x00A4--0x0451 942 個編碼位零散分佈著157 個Unicode編碼的中文字元
//0x2010--0x2642 1587 個編碼位零散分佈著289 個Unicode編碼的中文字元
//0x3000--0x33D5 982 個編碼位零散分佈著270 個Unicode編碼的中文字元
//0x4E00--0x9FA5 20902個編碼位零散分佈著20902個Unicode編碼的中文字元
//0xE7C7--0xE864 158 個編碼位零散分佈著95 個Unicode編碼的中文字元
//0xF92C--0xFFE5 1722 個編碼位零散分佈著173 個Unicode編碼的中文字元
大家自己計算一下,這樣一優化下來,只需要一個大小為26293的陣列零散地分佈著21886個有效中文字元。
下載: GBK與Unicode互換
檔案在上面的連結裡,大家要是想拿去專案中用的話,那需要注意GBKToUnicode.txt和UnicodeToGBK.txt的路徑。
還有一點,我的程式碼是在開發WindowsPhone的基礎上寫的。其中載入檔案的程式碼在其他平臺不適用。
貌似轉換效能也不太好,以後在優化。
至於說到GB2312與Unicode之間的相互轉換,GBK編碼向下相容GB2312編碼。
相關文章
- PHP中文GBK編碼轉UTF-8PHP
- 中文被 json_encode 編碼成 unicode 之後如何轉換回中文JSONUnicode
- Unicode、GBK、UTF-8、ASCII的編碼簡介UnicodeASCII
- 中文字串 轉 unicode 編碼的字串字串Unicode
- Unicode編碼和中文互轉(JAVA實現)UnicodeJava
- Python 編碼轉換與中文處理Python
- 用Javascript實現UTF8編碼轉換成gb2312編碼JavaScript
- GB2312簡體中文編碼表
- java中文字串漢字轉GBK編碼Java字串
- python實現中文和unicode轉換PythonUnicode
- UIImage與Iplimage相互轉換UI
- DataTable與List相互轉換
- SDOM與QDOM相互轉換
- ptyon 特殊處理 url 編碼與解碼,字元編碼轉化 unicode字元Unicode
- string與數字相互轉換
- JSON字串與HashMap相互轉換JSON字串HashMap
- java 物件與xml相互轉換Java物件XML
- 原碼,反碼,補碼相互轉換
- xml與陣列的相互轉換——phpXML陣列PHP
- 陣列與字串方法與相互轉換陣列字串
- string與char陣列相互轉換陣列
- java 字串與檔案相互轉換Java字串
- pandas中dataframe與dict相互轉換
- 旋轉矩陣與尤拉角的相互轉換矩陣
- Python字典格式與JSON格式的相互轉換PythonJSON
- 中文數字阿拉伯數字相互轉換
- jQuery 物件 與 原生 DOM 物件 相互轉換jQuery物件
- js時間戳與日期格式的相互轉換JS時間戳
- Unicode編碼解碼Unicode
- Redis中文顯示為Unicode編碼 亂碼的解決辦法RedisUnicode
- PHP 阿拉伯數字和中文數字的相互轉換PHP
- 編碼轉換
- 從 unicode 到位元組的轉換Unicode
- 塊級元素與內聯元素相互轉換
- JavaScript陣列與字串相互轉換 join、splitJavaScript陣列字串
- mysql時間與字串之間相互轉換MySql字串
- android中String與InputStream之間的相互轉換方式Android
- Apple開發_NSImage與CIImage之間的相互轉換APP
- 解碼返回Unicode編碼的文字Unicode