- 浏览: 419674 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
pmh905001:
写的很详尽,感谢!
解析jvm.dll和java.exe -
Bll:
插得真深啊,我的是(eclipse_j2ee_juno):F: ...
在eclipse里jsp编译后的java和class文件的位置 -
heming_way:
谢谢,对我很有用,解答了我对多值依赖的疑问
关于多值依赖--范式! -
JavaStudy2011:
java语言解析xml文件 -
vrussell:
Thanks man, it helps me a lot!
获得IEditorPart和IDocument
一、汉字编码的种类
汉字编码中现在主要用到的有三类,包括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 汉字编码范围
二、对汉字进行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;
五、编码表下载
见附件
六、编码对照表
http://www.herongyang.com/gb2312/
文件附件:
汉字编码表.rar 43.09 Kb 汉字编码表
名称
第一字节
第二字节
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)
发表评论
-
关于无法delete文件
2011-09-26 17:12 1421File f=new File(targetDir+&qu ... -
正则表达式匹配替换网址
2011-08-30 13:10 3432有这么一个需求, 网页里所有的src="/web/ ... -
符编码笔记:ASCII,Unicode和UTF-8
2011-07-29 10:37 931阮一峰 日期: 2007年10月28日 1. ASCII码 ... -
Class.getResource
2011-07-21 13:19 1019用JAVA获取文件,听似简单,但对于很多像我这样的新人来说, ... -
学习内部类的总结
2010-10-24 11:23 934public class TestInnerStatic ... -
Classloader加载类的问题探讨
2010-09-06 14:28 1012首先在C:\Program Files\Java\jdk1.6 ... -
学习spring IOC AOP
2010-09-03 11:28 2440一.什么是控制反转模式? 不创建对象,但是描述创建它们的方 ... -
有符号类型转为无符号类型
2010-09-01 17:29 1444int toUnsigned(short s) { ... -
学习 utf-8总结
2010-08-15 16:45 842在ultraEditor中查看字符 “中国”的utf-8格式的 ... -
unicode
2010-08-15 16:02 1339Unicode是国际组织制定 ... -
关于集合的remove
2010-06-01 13:15 1113public class collectionsTest ... -
字符和整型的各种表示方法
2010-05-28 15:52 1414一个字符 的表示 '\u12ab'这种表示方法表示unico ... -
一个程序中String==String两种输入
2010-05-28 10:56 961今天帮别人写个程序 无意中发现的!! private v ... -
js中的if和Java中的if
2010-05-21 14:20 1565if(-323) { alert("if&q ... -
float和double精度
2010-05-19 10:55 2470float与double的范围和精度 1 范围 float和 ... -
类装载器
2010-05-13 14:08 1422类装载器是Java程序 ... -
子类重写父类的方法中有10种要求
2010-05-11 12:25 2298昨天发了一个帖子 parent.class ... -
the static method cannot hide instance method from object
2010-05-10 22:17 1270public class CloneInit implem ... -
proctected属性和方法的包依赖性
2010-05-08 20:34 1133这个说法是为理解自己造的 package testpro ... -
system.in.read
2010-04-28 10:34 1273关于字符的获得getBytes一直搞不明白!! 也就得过且过 ...
相关推荐
汉字编码问题总结 GB2312-80 编码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。GB2312 收录...
汉字编码是计算机处理汉字的关键技术,它涉及到不同的字符集和编码标准。在IT行业中,理解和掌握汉字编码对于处理中文字符的存储、传输和显示至关重要。本文将深入探讨GB18030、GBK、Unicode这三种汉字编码以及它们...
### GB 2312-1980 信息交换用汉字编码字符集 基本集 #### 一、GB 2312-1980简介 GB 2312-1980是中华人民共和国国家技术监督局于1980年发布的信息交换用汉字编码字符集的基本集,它是中国最早的一套国家标准汉字...
标题中的“HZM.rar_汉字 编码_点阵字符_点阵汉字编码”提示了我们,这个压缩包文件主要涉及的是汉字编码和点阵字符的相关知识,特别是点阵汉字编码,这是一种在早期计算机和单片机应用中常见的汉字表示方式。...
航信汉字的编码与解码,编码便于使自己的pid进行汉字传输, 航信汉字编码与解码,eterm汉字编码与解码,汉字编码问题
### 汉字编码简明对照表知识点解析 #### 一、基础知识介绍 **汉字编码**是指用一组数字或字符来表示一个汉字的过程。在计算机系统中,由于汉字数量庞大且结构复杂,因此需要一种有效的编码方式来进行存储与传输。...
Unicode汉字编码表是全球计算机系统中用于表示汉字的标准编码之一,它在中文信息处理领域扮演着至关重要的角色。Unicode,全称统一码或万国码,是一个为所有字符集提供唯一数字标识的国际标准,旨在解决不同语言字符...
GBK汉字编码是中文字符编码的一种标准,全称为“汉字内码扩展规范”(Gbk,即Great Chinese Binary Code)。它是基于GB2312编码的扩展,兼容GB2312的同时增加了许多GBK独有的字符,总共包含了21004个汉字以及一些...
### 最全的Unicode汉字编码表知识点解析 #### Unicode与汉字编码概述 - **Unicode简介**:Unicode是一种国际标准字符编码方案,旨在支持世界上几乎所有语言的文字表示。它通过为每个字符分配一个唯一的数字来实现...
汉字编码器是一款用于处理汉字编码的实用工具,其exe格式表明这是一个可执行文件,通常在Windows操作系统中运行。这类程序的主要功能是帮助用户查询、转换和理解汉字的编码方式,以便于信息处理、编程或者文本解析等...
汉字编码是计算机处理汉字的关键技术,它涉及到计算机如何识别、存储和显示中文字符。这份“汉字编码培训ppt”显然是为了教育读者理解这一核心概念。在深入探讨之前,我们需要明确几个基本概念:ASCII码、Unicode、...
在本实验中,我们将深入探讨计算机硬件系统设计中的几个关键概念,主要集中在汉字编码、错误检测与纠正(海明编码)以及流水线传输技术。这些知识点对于理解和操作计算机硬件至关重要,尤其是在进行数据处理和存储时...
汉字编码表:深入解析GB2312标准 在探讨汉字编码表时,我们主要聚焦于GB2312这一编码标准。GB2312是中国国家标准汉字编码字符集,全称为《信息交换用汉字编码字符集·基本集》,自1981年发布以来,一直是中国大陆...
### 汉字编码知识点详解 #### 一、概述 汉字作为中文的主要书写形式,在计算机领域内有着极其重要的地位。为了使计算机能够正确地处理、存储及显示汉字,需要为每一个汉字分配一个唯一的编码。本篇文章将根据提供...
### Unicode与汉字编码 #### 一、Unicode简介 Unicode是一种国际化的字符编码方案,旨在为世界上所有的文字提供统一的编码方式。它最初由Unicode联盟在1991年提出,并随着时间的发展不断完善。Unicode的主要目标是...
北大青鸟汉字编码表
中国汉字编码对照表 中国汉字编码对照表是一个重要的参考工具,对于汉字的学习、研究和应用具有重要的作用。下面是该表中的知识点: 1. 汉字编码简明对照表:该表格将汉字按照拼音字母顺序排列,每个汉字对应四个...
汉字编码在信息技术领域中扮演着至关重要的角色,尤其是在文本处理、数据存储和网络传输中。本文将详细探讨“汉字编码简易转换工具”所涉及的知识点,包括汉字与字符的转换以及转义字符串的相关内容。 首先,我们要...