BIG5到GB的轉換技術 (轉)
BIG5到GB的轉換技術 (轉)[@more@]中文因為數量太多,所以與英文用ASCII碼一個位元組表示不同,它使用兩個位元組來
表示。透過計算這兩個位元組,我們可以得到其表示的漢字在中
文字型檔中的位置。讀取該位置的若干位元組,以獲得表示這個漢字的點陣資訊。有
了這些資訊,就可以分別在DOS或中顯示該漢字。事實上,
在文字中儲存的就是每個漢字對應的兩個位元組編碼,而顯示問題由中文操作
自動解決。
漢字編碼並不統一,我們使用的是GB碼,而臺灣地區使用的是BIG5碼。BIG5
碼檔案中儲存的是漢字相應的BIG5編碼,GB碼檔案中儲存的是漢字
相應的GB編碼(這也就是“亂碼現象”的來由)。所以轉換工作的關鍵是有一個
記錄每個BIG5編碼對應GB編碼的碼錶檔案。
第一步 製作碼錶檔案
BIG5碼編碼規則是這樣的:每個漢字由兩個位元組構成,第一個位元組的範圍從
0X81-0XFE,共126種。第二個位元組的範圍分別為0X40-0X7E,
0XA1-0XFE,共157種。也就是說,利用這兩個位元組共可定義出 126 * 157=19
782種漢字。這些漢字的一部分是我們常用到的,如一、丁,這些字
我們稱為常用字,其BIG5碼的範圍為0XA440-0XC671,共5401個。較不常用的字
,如濫、調,我們稱為次常用字,範圍為 0XC940-0XF9FE,共
7652個,剩下的便是一些特殊字元。
製作碼錶檔案的原理是這樣的:首先將所有的BIG5編碼寫入一個檔案,然後
,使用具有BIG5碼到GB碼轉換功能的,如地球村、東方快車、
四通利方,將檔案轉換為GB碼檔案,即得到碼錶檔案。
下面的源將所有可能的BIG5編碼(0XA100-0XFEFF)寫入檔案“Table.
TXT”。
//TURBO C++ 3.0
#include
#include
void main(){
FILE * codefile;
int i,j,k;
codefile=fopen("table.txt","w+b");
for (i=0xa1;i<=0xfe;I++){
for(j=0x00;j<=0xff;j++){
fwrite(& i,1,1,codefile);
fwrite(& j,1,1,codefile);}
}
fclose(codefile);
return;
}
執行地球村、東方快車或四通利方,將“Table.txt”從BIG5碼轉換為GB碼,
即獲得碼錶檔案。
第二步 轉換
下面的源程式,將BIG5碼檔案轉換為GB碼檔案。
//TURBO C++3.0
#include
#include
void main(){
int que, wei;
FILE * file;
FILE * tabfile;
FILE * destfile;
sourcefile = fopen("big.txt', "r+b");
//BIG5 碼檔案
tabfile = fopen("table.txt", 'r+b");
//碼錶檔案
destfile = fopen("gb.txt","w+b");
//轉換生成的GB碼檔案
while (!feof(sourcefile)){
fread(& que,1,1,sourcefile);
if (feof(sourcefile)){
break; }
if (que> =0xa1 && que <=0xfe)
//叛斷是否漢字(BIG5編碼)
{fread(& wei,1,1,sourcefile);
if (wei<0xa1) wei = wei - 0x40;
if (wei>=0xa1) wei = wei - 0xa1 + 0x7e - 0x40 + 1;
fseek(tabfile, 2 * ((que -0xa1) * (0xfe - 0xa1 + 1 + 0x7e - 0x40 + 1
) + wei), SEEK_SET);
fread(& que,1,1,tabfile);
fread(& wei,1,1,tabfile);
fwrite(& que,1,1,destfile);
fwrite(& wei,1,1,destfile);
}
else
fwrite(& que,1,1,destfile); //處理英文
}
fclose(sourcefile);
fclose(tabfile);
fclose(destfile);
return;
}
表示。透過計算這兩個位元組,我們可以得到其表示的漢字在中
文字型檔中的位置。讀取該位置的若干位元組,以獲得表示這個漢字的點陣資訊。有
了這些資訊,就可以分別在DOS或中顯示該漢字。事實上,
在文字中儲存的就是每個漢字對應的兩個位元組編碼,而顯示問題由中文操作
自動解決。
漢字編碼並不統一,我們使用的是GB碼,而臺灣地區使用的是BIG5碼。BIG5
碼檔案中儲存的是漢字相應的BIG5編碼,GB碼檔案中儲存的是漢字
相應的GB編碼(這也就是“亂碼現象”的來由)。所以轉換工作的關鍵是有一個
記錄每個BIG5編碼對應GB編碼的碼錶檔案。
第一步 製作碼錶檔案
BIG5碼編碼規則是這樣的:每個漢字由兩個位元組構成,第一個位元組的範圍從
0X81-0XFE,共126種。第二個位元組的範圍分別為0X40-0X7E,
0XA1-0XFE,共157種。也就是說,利用這兩個位元組共可定義出 126 * 157=19
782種漢字。這些漢字的一部分是我們常用到的,如一、丁,這些字
我們稱為常用字,其BIG5碼的範圍為0XA440-0XC671,共5401個。較不常用的字
,如濫、調,我們稱為次常用字,範圍為 0XC940-0XF9FE,共
7652個,剩下的便是一些特殊字元。
製作碼錶檔案的原理是這樣的:首先將所有的BIG5編碼寫入一個檔案,然後
,使用具有BIG5碼到GB碼轉換功能的,如地球村、東方快車、
四通利方,將檔案轉換為GB碼檔案,即得到碼錶檔案。
下面的源將所有可能的BIG5編碼(0XA100-0XFEFF)寫入檔案“Table.
TXT”。
//TURBO C++ 3.0
#include
#include
void main(){
FILE * codefile;
int i,j,k;
codefile=fopen("table.txt","w+b");
for (i=0xa1;i<=0xfe;I++){
for(j=0x00;j<=0xff;j++){
fwrite(& i,1,1,codefile);
fwrite(& j,1,1,codefile);}
}
fclose(codefile);
return;
}
執行地球村、東方快車或四通利方,將“Table.txt”從BIG5碼轉換為GB碼,
即獲得碼錶檔案。
第二步 轉換
下面的源程式,將BIG5碼檔案轉換為GB碼檔案。
//TURBO C++3.0
#include
#include
void main(){
int que, wei;
FILE * file;
FILE * tabfile;
FILE * destfile;
sourcefile = fopen("big.txt', "r+b");
//BIG5 碼檔案
tabfile = fopen("table.txt", 'r+b");
//碼錶檔案
destfile = fopen("gb.txt","w+b");
//轉換生成的GB碼檔案
while (!feof(sourcefile)){
fread(& que,1,1,sourcefile);
if (feof(sourcefile)){
break; }
if (que> =0xa1 && que <=0xfe)
//叛斷是否漢字(BIG5編碼)
{fread(& wei,1,1,sourcefile);
if (wei<0xa1) wei = wei - 0x40;
if (wei>=0xa1) wei = wei - 0xa1 + 0x7e - 0x40 + 1;
fseek(tabfile, 2 * ((que -0xa1) * (0xfe - 0xa1 + 1 + 0x7e - 0x40 + 1
) + wei), SEEK_SET);
fread(& que,1,1,tabfile);
fread(& wei,1,1,tabfile);
fwrite(& que,1,1,destfile);
fwrite(& wei,1,1,destfile);
}
else
fwrite(& que,1,1,destfile); //處理英文
}
fclose(sourcefile);
fclose(tabfile);
fclose(destfile);
return;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1000530/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++: BIG5到GB (轉)C++
- 內碼轉換技術 (轉)
- 分享 - mysql big5 轉 utf-8 轉換程式MySql
- YUV格式到RGB格式的轉換
- 將 UTF-8 零錯誤的轉換成 BIG5
- 從 RGB 到 HSV 的轉換詳細介紹
- 技術問 - 進位制轉換
- IPv6轉換技術是什麼?淺談IPv6轉換的兩種技術方式
- 為 CameraX ImageAnalysis 進行 YUV 到 RGB 的轉換
- RGB與YIQ的轉換
- Ipv6轉換難點分析之一:協議轉換技術協議
- 陽曆到陰曆的轉換 (轉)
- yuv 到 32 位 rgb 的 快速轉換演算法基mmx 實現 (轉)演算法
- 利用filter實時切換big5和gb2312,以及gb2312的簡繁體 (轉)Filter
- cg 到hlsl的轉換
- 【中科三方】IPv6轉換技術是什麼?淺談IPv6轉換的兩種技術方式
- javascriptRGB顏色轉換到16進位制詳解JavaScript
- 從現場實施到技術支援的轉折
- IPv6改造方案:協議轉換技術協議
- 程式設計實現GBK到UFT-8編碼的轉換程式設計
- RRGGBBAA或者RRGGBB轉換成rgba()
- macOS 轉換 SVG 到 PNGMacSVG
- 從Coding Fan到真正的技術專家(轉載)
- (轉)BDC技術
- VDSL技術(轉)
- php的漢字轉換: Unicode(UTF8)->GBK (轉)PHPUnicode
- 我的那些年(12)~公司技術轉行,我也跟著轉到java了Java
- 網段隔離器的網路地址轉換NAT技術
- 探索 Web API:SpeechSynthesis 與文字語言轉換技術WebAPI
- [顏色進位制轉換]js實現rgb和hex的相互轉換JS
- GBA的Tile模式技術探討--空間佔用篇(轉)模式
- Delphi 中big5 轉 Unicode 函式Unicode函式
- YUV <——> RGB 轉換演算法演算法
- 用Delphi處理公曆到農曆的轉換 (轉)
- HTML轉換到PDF的三種方式HTML
- 從技術到管理:思維轉變是關鍵
- IPv4到IPv6的轉換技術(上):IPv6和IPv4對比
- Java 浮點到字串轉換Java字串