让TRichEdit支持BIG5内码

酸辣粉下啤酒

酸辣粉下啤酒

2016-02-19 16:34

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享让TRichEdit支持BIG5内码教程,希望对大家能有一点小小的帮助。

  大家好,现在的软件如:Foxmail等软件,都有显示GB内码和BIG5内码的功能。我经过一段时间的摸索,发现了实现这种功能的方法。现在就来介绍给大家。首先,要给大家介绍一下这两种内码:大家都知道英文的ASCII码是用一个字节来表示的,但中文因为文字数量太多,所以只能用两个字节来表示。实际上我们常见的文本文件中保存的就是每个汉字对应的内码,而汉字的内码就是该汉字在中文字库中的逻辑位置。在中文字库中,该逻辑位置存放了这个汉字的图像信息,有了这些图像信息,就可以显示该汉字了,当然在现在的Windows中这个显示的过程是由操作系统自动来完成的,我们不必去关心它。但是由于一些历史上的原因,汉字的内码方案有两种,我们大陆地区使用的是GB码,而台湾省却使用的是BIG5码。GB码文件中保存的是汉字相应的GB编码,BIG5码文件中保存的是汉字相应的BIG5编码。而两种内码又都对应于各自的字库文件,所以当我们使用GB内码的简体中文Windows来看BIG5内码的文件时,就会产生常说的乱码现象。

  由于我们是要显示BIG5码的汉字,所以再介绍一下BIG5码的编码方案:每个汉字由两个字节构成,第一字节的范围从0X81-0XFE,第二个字节的范围分别为0X40-0X7E,0XA1-0XFE。好了,知道了汉字显示的原理和BIG5码的编码方案,就可以很容易让TRichEdit支持BIG5码了。

  第一步:找一个用于内码转换的码表文件。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  我用的是CCDOS97里带的CCDOS.TAB,这个文件的大小为45840个字节。如果你没有这个文件,可以给我来信(cnprogram@netease.com)我会寄一个给你。当然你还可以根据BIG5码的编码方案自己做一个,这里就不多说了。

  第二步:把码表文件转换成数组文件。见下面的程序。

  用BCB建立一个控制台应用程序。把它存为TABTOHEX.BPR和TABTOHEX.CPP。然后在TABTOHEX.cpp中添加以下代码:

  

#pragma hdrstop
#include condefs.h
#include"stdio.h"
#include"stdlib.h"
#pragma argsused
int main(int argc, char **argv)
{
  FILE *tab;
  FILE *hex;
  int i=0;
  unsigned int ch;
  tab=fopen("ccdos.tab","rb");//打开CCDOS.TAB文件
  hex=fopen("tab.h","wb");
  fputs("unsigned char tab[45840]={",hex);
  fprintf(hex,"n");
  for(i=0;i45840;i++)
  {
    if(i%20==0)
    {
      fprintf(hex,"n");
    }
    ch=fgetc(tab);
    fprintf(hex,"0x%xx2c",ch);//把码表文件转换为数组文件
  }
  fputs("0xff};",hex);
  fcloseall();
  return 0;
}

  然后编译并执行这个程序,得到TAB.H文件。

  第三步:在BCB3.0中新建一个标准的应用程序。添加一个TButton组件:Button1添加一个TRichEdit组件:RichEdit1适当调整它们的大小与位置。然后在Unit1.cpp中添加下面的代码:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  

#include vcl.h
#pragma hdrstop
#include "Unit1.h"
#include"tab.h"//把头文件TAB.H包含在内
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  RichEdit1-Lines-LoadFromFile("c:\BIG5.TXT");//读取一个BIG5码的文件,可自己的情况设定
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  unsigned long i,address;//把BIG5码转换为GB码
  unsigned char ch1,ch2;
  char *x;
  x=RichEdit1-Lines-GetText();
  i=0;
  while(x[i]!='')
  {
    ch1=x[i];
    if(ch1=0xa1)
    {
      ch2=x[i+1];
      if(ch2=0x40&&ch2=0x7e)
      {
        address=ch1*314+ch2*2-33010;
        x[i]=tab[address];
        x[i+1]=tab[address+1];
      }
      if(ch2=0xa1&&ch2=0xfe)
      {
        address=ch1*314+ch2*2-33078;
        x[i]=tab[address];
        x[i+1]=tab[address+1];
      }
      i+=2;
    }
    else
    i++;
  }
  RichEdit1-Lines-Text=x;
  RichEdit1-SetFocus();
  RichEdit1-SelStart = 0;
}

  编译并执行它,首先你会看到RichEdit1中的BIG5码文件显示为乱码。按一下Button1,这时,你就会看到RichEdit1中的乱码变成了正常的汉字。好了,现在你自己编的软件也可以支持BIG5码了,是不是感觉更专业一些。GB-BIG5的转换方法也是类似的,有兴趣的朋友可以给我来信。最后,祝大家龙年愉快。本程序在WIN97,BCB3.0下编译通过。

展开更多 50%)
分享

猜你喜欢

让TRichEdit支持BIG5内码

编程语言 网络编程
让TRichEdit支持BIG5内码

GB与BIG5内码转换COM原代码

ASP
GB与BIG5内码转换COM原代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Foxmail如何阅读BIG5码邮件

电脑网络
Foxmail如何阅读BIG5码邮件

Foxmail怎么发送BIG5码邮件

电脑网络
Foxmail怎么发送BIG5码邮件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

ADO如何提供异动功能?(BIG5)

ASP
ADO如何提供异动功能?(BIG5)

ADO如何使用Update语法呢?(BIG5)

ASP
ADO如何使用Update语法呢?(BIG5)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

ListBox编程两例

ListBox编程两例

稳定无优的网赚-出售文字链接赚钱

稳定无优的网赚-出售文字链接赚钱
下拉加载更多内容 ↓