Unicode編碼字元的點陣顯示

2021-06-16 06:19:11 字數 1272 閱讀 6684

對於unicode編碼的字元,可以先將unicode編碼轉換為gbk編碼,然後利用gbk點陣字型檔(gbk.bin)顯示字元。乙個比較好的編碼轉換方法是,製作乙個按照unicode編碼順序排列的gbk編碼表,直接根據unicode編碼就可以查到對應的gbk編碼,具體的製作方法如下:

上以篇文章中已經製作了乙個gbk編碼的全字元檔案gbk.txt,用記事本開啟gbk.txt,然後以unicode編碼另存為unicode.txt檔案。

這樣的話,所有的gbk編碼字元都用unicode編碼儲存在unicode.txt中了,可以用winhex開啟unicode.txt,會發現前兩個位元組是fffe,這是unicode編碼的標識,要注意後面的unicode編碼是小端儲存。

這裡要用程式製作乙個unicode與gbk編碼相對應的檔案,該檔案每四個位元組為一組,其中前兩個位元組為unicode編碼,後兩個位元組是對應的gbk編碼,兩種編碼都以小端儲存,資料結構如下:

這個資料結構是以gbk編碼的順序存放在檔案uni2gbk.txt中,檔案大小為128764byte。程式如下:

用程式將uni2gbk.txt檔案中的union code資料結構按照unicode編碼的順序從小到大排序,程式如下:

排序後,為了與沒有排序的uni2gbk.txt區分,將檔名改為uni2gbkp.txt。

用winhex開啟uni2gbkp.txt,可以發現,從0到第0x80eb個位元組中的unicode編碼都是0x0020或0x003f,這些都是無用的編碼,它們所對應的gbk編碼也是無用的,都可以刪除。

刪除後,uni2gbkp.txt檔案中的union code資料結構的unicode編碼就是從0x00a4開始,以0xffe5結束。但是這些unicode編碼不是連續的,例如0x00a4之後就是0x00a7,為了方便查詢,需要在不連續的編碼中間用union code填充,對應的gbk編碼部分用0x0000填充,然後將union code中的unicode編碼全部刪除。最後生成uni2gbk.bin檔案。程式如下:

生成的uni2gbk.bin檔案中都是gbk編碼,這些gbk編碼都是按照對應的unicode編碼(0x00a4到0xffe5)的順序排列的。

假設乙個字元的unicode編碼為x,那麼它對應的gbk編碼在uni2gbk.bin檔案中的位置就是:

(x-0x00a4)*2

從這個位置讀取乙個unsigned short int資料,就是它的gbk碼。然後利用gbk點陣字型檔(gbk.bin)即可顯示。

例如,以linux的終端模擬點陣螢幕,程式如下:

unicode點陣字型檔檔案:

Unicode編碼字元的點陣顯示

對於unicode編碼的字元,可以先將unicode編碼轉換為gbk編碼,然後利用gbk點陣字型檔 gbk.bin 顯示字元。乙個比較好的編碼轉換方法是,製作乙個按照unicode編碼順序排列的gbk編碼表,直接根據unicode編碼就可以查到對應的gbk編碼,具體的製作方法如下 上以篇文章中已經製...

php把unicode編碼字元轉成utf 8格式

最近在採集的時候,遇到寫特殊的編碼體整個頁面所有的漢字都是unicode的字元如下 本期費用合計 本期費用合計 u54c8 u55bd 哈嘍 著實讓人頭疼一把。好在在熱心的幫助下有效解決了 第一種 適用 下面是乙個轉化函式 將uicode 轉化成 utf 8 public function unes...

unicode編碼 字元的轉換和得到漢字的區位碼

一 unicode編碼 字元的轉換截圖 二 unicode編碼 字元的轉換 using system using system.collections.generic using system.componentmodel using system.data using system.drawing...