字符与汉字的小百科
2011/10/11 14:08:19

那么我就给你介绍一下我总结出来的GB字符识别方法(是的,就是你想要的那种把半角字符、全角符号和汉字区别开来的方法)吧。在此之前希望你有心里准备,篇幅可能会稍微长一些,因为涉及到的内容比较多。不论你之前看过什么样的资料,并对此有多大程度的了解,如果你希望能非常专业地解决这个问题(嗯哼,就像Win32 API或VCL做的那样专业),那就要有一定的耐心从最基础的地方看起。对了,在继续看下去之前,我想你至少应该明白ANSI和双字节字符集的概念,如果不明白,可以先看看这篇文章

http://dev.csdn.net/develop/article/70/70372.shtm

原文虽没有明确解释ANSI的概念,但在介绍双字节字符集时已多次涉及,这里我总结一下:所谓ANSI就是在Unicode和ISO10646出现以前,各个非英语国家和地区的计算机科技工作者为了将本地语言文字编码进计算机,而对基本ASCII编码所做的各种扩展编码方案的统称,它们多用两个以上的字节编码一个字符(称为多字节字符集MBCS),其中比较典型的就是在东亚广泛被使用的双字节字符集(DBCS)。这个东西可没你想象的那么简单呢--



第一步 认识Delphi的ByteType函数(我用的是Delphi7,6用得少,里面应该有这个函数吧)

这个函数的作用是检测ANSI字符串中某个字节是属于一个单字节字符(即ASCII字符)还是双字节字符的第一个字节,又或是双字节字符的第二个字节。

声明单元
SysUtils

VCL例程分类
MBCS处理

Delphi语法:
function ByteType(const S: string; Index: Integer): TMbcsByteType;
C++语法:
extern PACKAGE TMbcsByteType __fastcall ByteType(const AnsiString S, int Index);

说明
用ByteType函数可以检测字符串指定字节的类型:单字节字符、多字节字符的引导字节或多字节字符的尾字节中的一个。
参数S是一个可能包含多字节字符的ANSI字符串。
参数Index表示你想要检测其类型的字节在字符串中的索引位置,这个索引位置是从1开始的(也就是说字符串中第一个字节的索引位置为1)。
如果当前系统不使用多字节字符集(MBCS),ByteType函数将始终返回mbSingleByte;否则,函数将在指定的字节在字符串中单独地表示一个字符的时候返回mbSingleByte,在指定的字节在字符串中表示一个双字节字符的首字节的时候返回mbLeadByte,在指定的字节在字符串中表示一个多字节字符的尾字节中的一个的时候返回mbTrailByte。
注意:这个函数不会检查Index值是否小于S的长度,程序员自己应该意识到这一点:在调用ByteType函数前,必须确保所要检测的字节的索引位置不会超出字符串的长度。
在双字节字符集系统里面(95以上的简体中文Windows操作系统所用的GB字符集就是典型的ANSI双字节字符集),字符只有基本的两类:单字节字符(映射ASCII字符集)和双字节字符。ByteType是Delphi提供给我们的一个非常有用的函数,它让我们可以在不必涉及底层操作的情况下轻易地得知一个字符串里面的某个字节(嗯!是的,你没有看错,就是字节,ANSI字符串的基本访问单位是字节,不是字符)是属于什么字节类型。我们可以通过字节类型的信息,进而推论它所代表的字符的类型。所以,字符类型识别的第一步就是熟练地运用ByteType函数进行字节类型的识别。以下是一个例子:
case ByteType(Edit1.Text,strtoint(Edit2.Text)) of
mbSingleByte:
Label1.Caption:='单字节(ASCII)字符';
mbLeadByte:
Label1.Caption:='双字节字符首字节';
mbTrailByte:
Label1.Caption:='双字节字符尾字节'
End;

如果你还不是很明白ByteType函数到底能干些什么,那我再举一些例子:
ByteType('你',1)=mbLeadByte
ByteType('你',2)=mbTrailByte
ByteType

下一页
返回列表
返回首页
©2024 金松软件
Powered by iwms