如何区分字符串中的汉字是简体中文的,还是Big5繁体中文的?

freegoal 2001-05-20 08:45:00
...全文
414 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
halee 2001-09-03
  • 打赏
  • 举报
回复
ahphone(阿丰) 你的代码能email给我吗?
okey@email.com.cn
halee 2001-09-03
  • 打赏
  • 举报
回复
//BIG5码的编码范围是首字节A1-F9,尾字节分两段,分别是40-7E及A1-FE,首字节A1-A3是符号区,A4-C5是常用汉字区。
//尾字节40-7E是BIG5码特有的,可以以此来判别,但是现在GBK在这个码区也定义了

if (SourceSTR[i]>=0xA1&&SourceSTR[i]<=0xF9&&SourceSTR[i+1]>=0x40&&SourceSTR[i+1]<=0x7E||SourceSTR[i]>=0xA1&&SourceSTR[i]<=0xF9&&SourceSTR[i+1]>=0xA1&&SourceSTR[i+1]<=0xFE) //叛断一定就是big5码吗?

(SourceSTR[i]>=0xA1&&SourceSTR[i]<=0xF9)&&(SourceSTR[i+1]>=0xA1&&SourceSTR[i+1]<=0xFE)) //叛断是否汉字(big5编码)
if ((SourceSTR[i]>0xA1&&SourceSTR[i]<0xB0))// 是GB2312的汉字码吗 大五码也在其中呢????
ximuwa 2001-07-31
  • 打赏
  • 举报
回复
听课
ahphone 2001-07-13
  • 打赏
  • 举报
回复
Q:如何区别文本是BIG5还是GB?
A:
1.如果GB和Big5在一个文本文件,很难分开

GB范围:
1st byte 2nd byte
b0-ff a0-fe

Big5范围:
1st byte 2nd byte
a0-ff 40-7e or >a0

判断方法如下:(转换代码可以问我要)

跳过,省略,不告诉你,..............


这个问题以前讨论过,在精华区。
ender 2001-07-13
  • 打赏
  • 举报
回复
`¤é”Ö¼Ö
freegoal 2001-05-22
  • 打赏
  • 举报
回复
到底有没有人知道?
freegoal 2001-05-21
  • 打赏
  • 举报
回复
to czylj(夭夭):
我的问题不是如何转换GB码到Big5码,如何判断一个字符串中的汉字是GB码的还是Big5码的?
夭夭 2001-05-20
  • 打赏
  • 举报
回复
这有什么用吗
夭夭 2001-05-20
  • 打赏
  • 举报
回复

 中文因为数量太多,所以与英文用ASCII码一个字节表示不同,它使用两个字节来表示。通过计算这两个字节,我们可以得到其表示的汉字在中文字库中的位置。读取该位置的若干字节,以获得表示这个汉字的点阵信息。有了这些信息,就可以分别在DOS或WINDOWS中显示该汉字。事实上,在文本文件中保存的就是每个汉字对应的两个字节编码,而显示问题由中文操作系统自动解决。

  汉字编码并不统一,我们使用的是GB码,而台湾地区使用的是BIG5码。BIG5码文件中保存的是汉字相应的BIG5编码,GB码文件中保存的是汉字相应的GB编码(这也就是“乱码现象”的来由)。所以转换工作的关键是有一个记录每个BIG5编码对应GB编码的码表文件。

第一步 制作码表文件

  BIG5码编码规则是这样的:每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE,共126种。第二个字节的范围分别为0X40-0X7E,0XA1-0XFE,共157种。也就是说,利用这两个字节共可定义出 126 * 157=19782种汉字。这些汉字的一部分是我们常用到的,如一、丁,这些字我们称为常用字,其BIG5码的范围为0XA440-0XC671,共5401个。较不常用的字,如滥、调,我们称为次常用字,范围为 0XC940-0XF9FE,共7652个,剩下的便是一些特殊字符。
制作码表文件的原理是这样的:首先将所有的BIG5编码写入一个文件,然后,使用具有BIG5码到GB码转换功能的软件,如地球村、东方快车、四通利方,将文件转换为GB码文件,即得到码表文件。

   下面的源程序将所有可能的BIG5编码(0XA100-0XFEFF)写入文件“Table.TXT”。

//TURBO C++ 3.0
#include <Stdio.h>
#include <stdlib.h>
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 <stdio.h>
#include <stdlib.h>
void main(){
int que, wei;
FILE * sourcefile;
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;
}

  以上程序在Win95/97,TC3.0 通过。稍加修改,也可用于CB、VC或VB程序中。用同样的方法,我们也可以将GB码转换为BIG5码。
smartboyme 2001-05-20
  • 打赏
  • 举报
回复
搜索一下吧,这个问题说过很多次了吧!
软件介绍: 设置Flashpaste文界面:初次运行后,在弹出的“configuration wizard for flashpaste”配置向导窗口点击“下一步”,在“first, select a language for the program interface:”选择“Chinese (PRC)”简体或“BIG5(Tranditional Chinese)”繁体然后按提示进行下面的初始配置即可。Flashpaste 为打字提供了一个强大、高效、省时的解决方案。您可以使用该软件或它的文本模板方式进行快速打字输入,极大的扩展了 Windows 剪贴板的功能。您将不再需要不断的复制和粘贴来自不同来源的多个文本。这种解决方案不仅可让你节省时间,它还有助于避免手动输入时出现的错误。操作向导将出现对话框,用于选择你要插入的字符串,要插入您之前输入过的文本字符串,请按热键或点击托盘图标以出现字符串选择对话框。我们建议您使用默认按键组合 Ctrl   U。如果您要更改它,请放置您的鼠标指针到下面的字段内,然后按您要使用的按键组合。字符串选择对话框附加调整选项。指定当您按热键时字符串对话框要出现的位置:屏幕心、插入符号附近、先前的位置要使紧邻字符串选择对话框的工具提示完整显示当前字符串,请选此复选框。显示完整的文本于工具提示之内、记忆最后粘贴的字符串管理字符串选择对话框,字符串树,占据了几乎整个对话框,用于选择要插入的字符串。请看下面的控制按钮。插入文本到指针所在位置复制字符串到剪贴板关闭字符串选择对话框现在您知道了使用字符串选择对话框的方式,请使用 Flashpaste 插入您的首个文本。只需放置指针到下面的输入字段,然后按您定义的热键即可。字符串选择对话框将出现。选择任意字符串并按 Enter 或插入文本按钮。很简答,不是吗?剪贴板历史,Flashpaste 可以记忆复制到剪贴板上的最后数个字符串,以便于您稍后重新使用它们。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧