汉字代码问题...
1984年9月,五笔字型汉字编码输入法在联合国做操作演示,达到每分钟输入120个字的速度,每个汉字及词组的输入最多4键,从此,计算机的汉字输入问题得到了根本的解决。此后,汉字输入技术的发展越来越先进,但都是利用西文电脑键盘为汉字编制代码,输入代码就相应完成了汉字的输入。
现有的汉字编码已有四五百种之多,主要可分为形码、声码和形声码。五笔字型是形码,它把汉字分解为若干字根,分别由字母代表;声码则是根据汉语拼音制作的编码,如双拼双音输入法;形声码是把形码和声码的特点结合起来,将字根转换成拼音进行编码,兼有两者的优长。汉字编码正朝着日趋简化的方向发展,目前,语音识别输入技术已逐渐趋于完善,并得到应用,使汉字电脑输入变得越来越容易。由于汉字有数万之众,为了不占用计算机的内存空间,于是出现了将汉字资源做成硬件的汉卡。汉卡能使计算机达到与处理英文同等的效率。20世纪80年代初的汉卡又笨又大,后来采用超大规模集成电路,浓缩度达到几万分之一。汉卡的微型化为微型计算机的多功能化提供了条件。
我教你一个办法
打开百度在搜索栏上打出你要找的字然后"百度一下"
浏览器的地址栏就出了很多代码(代码在wd=之后)
每四个字符代表一个代码,如颜是D1D5
卩s:需要把%去掉
然后打开电脑自带的计算器然后点“查看”→科学性
将进制改为十六进的
然后将字符粘贴或者打进去然后再点十进制
好了现在出现的数字就是代码了
然后按住ALT再加代码就OK了
颜:53717
永:54208
恒:47843
张: 54725
菁: 56764
打字好累啊
希望采纳
由于常常要和汉字处理打交道,因此,我常常受到汉字编码问题的困扰。在不断的打击与坚持中,也积累了一点汉字编码方面的经验,想和大家一起分享。
一、汉字编码的种类
汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。
1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字。
GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。
GB2312将代码表分为94个区,对应第一字节(0xa1-0xfe);每个区94个位(0xa1-0xfe),对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。
2、Big5又称大五码,主要为香港与台湾使用,即是一个繁体字编码。每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE(即129-255),共126种。第二个字节的范围不连续,分别为0X40-0X7E(即64-126),0XA1-0XFE(即161-254),共157种。
3、GBK是GB2312的扩展,是向上兼容的,因此GB2312中的汉字的编码与GBK中汉字的相同。另外,GBK中还包含繁体字的编码,它与Big5编码之间的关系我还没有弄明白,好像是不一致的。GBK中每个汉字仍然包含两个字节,第一个字节的范围是0x81-0xFE(即129-254),第二个字节的范围是0x40-0xFE(即64-254)。GBK中有码位23940个,包含汉字21003个。
表1 汉字编码范围
名称
第一字节
第二字节
GB2312
0xB0-0xF7(176-247)
0xA0-0xFE(160-254)
GBK
0x81-0xFE(129-254)
0x40-0xFE(64-254)
Big5
0x81-0xFE(129-255)
0x40-0x7E(64-126)
0xA1-0xFE(161-254)
二、对汉字进行hash
为了处理汉字的方便,在查找汉字的时候,我们通常会用到hash的方法,那怎么来确定一个汉字位置呢?这就和每种编码的排列有关了,这里主要给出一种hash函数的策略。
对于GB2312编码,设输入的汉字为GBword,我们可以采用公式(C1-176)*94 + (C2-161)确定GBindex。其中,C1表示第一字节,C2表示第二字节。具体如下:
GBindex = ((unsigned char)GBword.at(0)-176)*94 + (unsigned char)GBword.at(1) - 161;
之所以用unsigned char类型,是因为char是一个字节,如果用unsigend int,因为int是4个字节的,所以会造成扩展,导致错误。
对于GBK编码,设输入的汉字为GBKword,则可以采用公式 index=(ch1-0x81)*190+(ch2-0x40)-(ch2/128),其中ch1是第一字节,ch2是第二字节。
具体的,
GBKindex = ((unsigned char)GBKword[0]-129)*190 +
((unsigned char)GBKword[1]-64) - (unsigned char)GBKword[1]/128;
三、怎样判断一个汉字的是什么编码
直接根据汉字的编码范围判断,对于GB2312和GBK可用下面两个程序实现。
1、判断是否是GB2312
bool isGBCode(const string& strIn)
{
unsigned char ch1;
unsigned char ch2;
if (strIn.size() >= 2)
{
ch1 = (unsigned char)strIn.at(0);
ch2 = (unsigned char)strIn.at(1);
if (ch1>=176 && ch1<=247 && ch2>=160 && ch2<=254)
return true;
else return false;
}
else return false;
}
2、判断是否是GBK编码
bool isGBKCode(const string& strIn)
{
unsigned char ch1;
unsigned char ch2;
if (strIn.size() >= 2)
{
ch1 = (unsigned char)strIn.at(0);
ch2 = (unsigned char)strIn.at(1);
if (ch1>=129 && ch1<=254 && ch2>=64 && ch2<=254)
return true;
else return false;
}
else return false;
}
3、对于Big5
它的范围为:高字节从0xA0到0xFE,低字节从0x40到0x7E,和0xA1到0xFE两部分。判断一个汉字是否是BIG5编码,可以如上对字符的编码范围判断即可。如何定位呢?那么也想象所有编码排列为一个二维坐标,纵坐标是高字节,横坐标是低字节。这样一行上的汉字个数:(0x7E-0x40+1)+(0xFE-0xA1+1)=157。那么定位算法分两块,为:
if 0x40<=ch2<=0x7E: #is big5 char
index=((ch1-0xA1)*157+(ch2-0x40))*2
elif 0xA1<=ch2<=0xFE: #is big5 char
index=((ch1-0xA1)*157+(ch2-0xA1+63))*2
对于第二块,计算偏移量时因为有两块数值,所以在计算后面一段值时,不要忘了前面还有一段值。0x7E-0x40+1=63。
四、如果判断一个字符是西文字符还是中文字符
大家知道西文字符主要是指ASCII码,它用一个字节表示。且这个字符转换成数字之后,该数字是大于0的,而汉字是两个字节的,第一个字节的转化为数字之后应该是小于0的,因此可以根据每个字节转化为数字之后是否小于0,判断它是否是汉字。
例如,设输入字为strin,则,
If (strin.at(0) < 0)
cout << ”是汉字” << endl;
else cout << ”不是汉字” << endl;
五、编码表下载
GBK编码表,下载
GB2312编码表,下载
汉字代码问题...
2、Big5又称大五码,主要为香港与台湾使用,即是一个繁体字编码。每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE(即129-255),共126种。第二个字节的范围不连续,分别为0X40-0X7E(即64-126),0XA1-0XFE(即161-254),共157种。3、GBK是GB2312的扩展,是向上兼容的,因此GB231...
汉字国标码是什么?
所谓“国标码”,是指国家标准汉字编码。一般是指国家标准局1981年发布的《信息交换用汉字编码字符集(基本集)》,简称GB-2312。在这个集中,收进汉字6763个,其中一级汉字3755个,二级汉字3008个。一级汉字为常用字,按拼音顺序排列,二级汉字为次常用字,按部首排列。问题三:国标码也称为汉字的什么...
五笔问题-“还”字代码
“不”字在I里是一级简码,不能部首用的!比如说,“是”吧。一给简码J,但“题”字也不能直接用JDM啊!它自己本身是简码。你说的“还”字只是一个例字!这样的字多的很!
VB代码问题 请教哪部分是“字体字号”代码?请详细点
.NameFarEast = "宋体" \/\/汉字字体 .NameAscii = "Times New Roman" \/\/Ascii部分字体 .NameOther = "Times New Roman" \/\/其它字体 .Name = "Times New Roman" \/\/默认字体 .Size = 10.5 \/\/字体大小 .Bold = False \/\/是否加粗 True为加粗 .Italic = False \/\/是否倾斜 Tru...
设计一个算法代码 ,解字谜ABCAB*A=DDDDDD
int main(){ int a, b, c, dddddd;for(a=1; a<=9; a++)for(b=0; b<=9; b++)for(c=0; c<=9; c++){ dddddd = (a*10000 + b*1000 + c*100 + a*10 + b) * a;if(dddddd % 111111 == 0)printf(" %d%d%d X %d = %d\\n", a,b,c,a,b,a,dddddd);} re...
关于Excel首字拼音码的问题,能看懂程序代码的进来
Function pychar(char)zm = 65536 + Asc(char)If (zm >= 45217 And zm <= 45252) Then pychar = "A"If (zm >= 45253 And zm <= 45760) Then pychar = "B"If (zm >= 47761 And zm <= 46317) Then pychar = "C"If (zm >= 46318 And zm <= 46825) Then pychar = "D"If...
我的名字有个生僻字怎么查代码
垚 2416 汉字区位码表 a — bao 查找说明 所谓汉字编码,就是采用一种科学可行的办法,为每个汉字编一个唯一的代码,以便计算机辨认、接收和处理。在此介绍的是《国家标准信息交换汉字编码》。这种编码经过加工整理一律以汉语拼音的字母为序,音节相同的字以使用频率为序,其查找方法与一般汉语字典的汉字...
如何解决Java编程运行时出现非法字符问题?
首先,非法字符错误通常是由于代码中包含了不被Java语言所接受的特殊字符或符号导致的。解决这个问题的方法主要有以下几点:更系统全面的学习资料,点击查看1. 检查代码:仔细检查您的Java代码,特别是可能出现问题的地方,例如字符串、变量名、注释等。确保代码中没有使用到特殊字符,如中文全角字符、特殊...
汉字交换码和汉字机内码在计算机内是如何转化的?
这里的汉字交换码应该是国标码GB2312 就是下面的第3条转化规律 前两个也列出来给你参考吧 1.区位码(十进制)转换成区位码(十六进制)。这里要把前两个位换成十六进制,然后后两位换成十六进制。2.国际码=区位码(十六进制)+2020H 3.汉字机内码=国际码+8080H ...
怎么把字变成代码
因为原文主要是汉字重复的问题,所以总的思路是用字符比较来去除重复的字符,(汉字占两个字节)。原文存放在D:\\ldj.txt。include <stdio.h> include <stdlib.h> include <string.h> int main(){ char i,a[2],b[2];FILE *in,*out;if((in=fopen("D:\\\\ldj.txt","rb")) == NULL)\/\/...