📄 visual basic6编程中的汉字处理 ----- 程序设计联盟 - pgsun_com.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)http://www.pgsun.com/doc/200513/20051126840166.htm -->
<HTML><HEAD><TITLE>Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN.com</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/style.css"
type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2900.2604" name=GENERATOR></HEAD>
<BODY leftMargin=0
background="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/bg.gif"
topMargin=0>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1 height=46></TD>
<TD vAlign=bottom
background="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/top_01.jpg"
height=52>
<TABLE cellSpacing=5 width="100%" border=0>
<TBODY>
<TR>
<TD width="76%" height=37><IMG height=31
src="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/logo1.gif"
width=117></TD>
<TD vAlign=bottom width="24%"><IMG height=5
src="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/logo2.gif"
width=169></TD></TR></TBODY></TABLE></TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1></TD>
<TD bgColor=#333333 height=25>
<SCRIPT language=javascript
src="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/adv_dh.js"></SCRIPT>
</TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1 height=32></TD>
<TD>
<SCRIPT language=javascript
src="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/adv_top.js"></SCRIPT>
</TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1 height=238></TD>
<TD vAlign=top>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
background="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/top_02.jpg"
border=0>
<TBODY>
<TR>
<TD width="6%"><IMG height=25
src="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/mid_01.jpg"
width=4></TD>
<TD width="87%">位置:<A href="http://www.pgsun.com/default.asp">首页</A>
>> <A
href="http://www.pgsun.com/class.asp?id=mm1&idc=mm2">文件字符</A></TD>
<TD align=right width="7%"><IMG height=25
src="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/top_03.jpg"
width=4></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD><B> Visual Basic6编程中的汉字处理</B></TD></TR>
<TR>
<TD height=1>
<TABLE cellSpacing=1 cellPadding=0 width="100%" align=center
bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD bgColor=#f1f1f1 height=24>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR align=middle>
<TD width="24%">作者: 不详</TD>
<TD width="30%">来源:不详</TD>
<TD width="25%">上传日期: 2005-11-26</TD>
<TD width="21%">点击数:
<SCRIPT language=javascript
src="Visual Basic6编程中的汉字处理 ----- 程序设计联盟 - PGSUN_com.files/hits.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD bgColor=#ffffff height=33>
<TABLE cellPadding=3 width="100%" border=0>
<TBODY>
<TR>
<TD><FONT
color=#666666> 版权申明:本站部分文章来源于互联网,版权归原作者所有,其他网站及传媒如需使用,请于原作者联系。本站如有侵权请您与我们联系。站内文章仅供学习参考之用,任何人不得用于商业目的。
</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE cellPadding=5 width="99%" align=center border=0>
<TBODY>
<TR>
<TD><BR>Visual Basic6编程中的汉字处理
<P></P>
<P><BR> 在DOS时代,拥有一个华丽的汉字菜单几乎是每个高档中文应用程序必须的包装。中文Windows操作系统的出现使得高级开发平台实现全中文的提示和界面非常容易和方便。在一般的应用程序中已经很少需要去专门考虑汉字处理的问题。
</P>
<P> 但是在许多工程控制和字符串处理的环境中,汉字字符的处理仍然有别于西文字符的处理,需要加以专门的考虑。
<BR> 一、VB6对汉字处理的支持
<BR> 对汉字处理,VB6主要是提供了一些输入法设置方面的支持。它提供了一个ImeMode属性和ImeStatus函数来确定和设置输入法的状态。而且此属性和方法只在VB6的东亚区版本中有效。
</P>
<P> IMEStatus函数返回一个整数,用来指定当前Windows的输入法(IME)方式。
<BR> 下面是中文地区的返回值: <BR> 常数 值 描述 <BR> vbIMENoOP 0 不安装IME(缺省)
<BR> vbIMEOn 1 打开IME <BR> ImeMode属性返回或者设置被选定的对象的 IME (Input
Method <BR>Editor,输入方法编辑器)状态。
<BR> 可以先用ImeStatus函数来检测当前的输入状态,并用IMEMode来控制其输入状态。
<BR> 如Text1.IMEMode=0(预定值)、=1(切换为中文输入)、=2(切换为英文输入)
<BR> 对于简体汉字和繁体汉字 IME,只能使用设置 0 到 2。设置 3 到 10 对于汉字系统是无效的。
<BR> VB6功能上对汉字处理的直接支持也仅限于此。对于汉字字符串的处理,VB6并没有提供专门的函数和方法。
<BR> 二、确定汉字字符串的长度 <BR> 各个版本的VB对汉字字符的长度定义并不相同。在Windows
<BR>3.x中,VB3中认为每个汉字的长度为2字节。VB自从32位版本以後,不管中英文字,均以2
<BR>bytes来储存,这与中文Win95的汉字内核有关。但是VB4以后,VB认为每个汉字的长度为1。这在处理包含汉字的字符串时带来很多的不便。
</P>
<P> 由于Len、Left、Mid等字符串函数认为一个汉字和一个西文字符的长度都为1,因此处理汉字字符串时有一定的难度。实现上必须要能把汉字按照两个字符(字节)的形式读出。因此在截取汉字字符串的子串时需特别注意。
</P>
<P> 由于汉字处理和汉字字模存储的特殊性,在许多情况下我们希望汉字字符的长度为2,英文字符为1。由于VB5和VB6把一个汉字作为一个字符。因此处理汉字时首先必须能正确判断汉字字符串的长度。
</P>
<P> 在VB3或C++里,汉字的
<BR>ASCII码均大于零,而VB5和VB6中汉字的ASCII码小于0。因此通过判断一个未知字符的ASCII码就可以判断该字符是否汉字。
</P>
<P> 这里我们提供了两种方法来判断汉字字符串的长度。 <BR> 1、方法1
<BR> VB6中提供了LenB函数用于字符串中的字节数据。如同在双字节字符集(DBCS)语言中一样,LenB返回的是用于代表字符串的字节数,而不是返回字符串中字符的数量。如为用户自定义类型,LenB返回在内存中的大小。
</P>
<P> LenB(StrConv(Str1,vbFormUnicode))
<BR> 对要处理的字符串Str1,必须先使用StrConv函数把ANSI格式的Byte数组转换为字符串,否则直接使用LenB函数得到的结果比实际结果大。
</P>
<P> 2、方法2
<BR> 这里自定义了一个子函数CLen来计算汉字字符串的实际长度。同时还能判断字符串中汉字的实际个数。
<BR> Function CLen(HzStr$) as Integer <BR> Static HzNum as
Integer <BR> L = len(HzStr$) <BR> For n=1 to L <BR> If
Asc(mid$( HzStr$,n,1))<0 Then HzNum = HzNum + 1 <BR> Next n
<BR> Clen = L + HzNum <BR> End Function
<BR> CLen函数中的静态变量HzNum返回字符串中实际汉字的数目。 <BR> 三、汉字字模读写和存储的机理
<BR> 计算机是以编码的方式来处理和使用字符的。西文字符采用一个字节表示,即ASCII码,一般只用七位来表示128个字符,而把最高位用作奇偶校验(或者不用)。我国国标规定汉字用内码表示,内码为两个字节。为了保证中西文兼容,也就是说汉字系统的内码必须同时允许ASCII码和汉字的使用,两者之间不应发生冲突。目前规定每个字节只用七位,若两个字节的最高位均为1,则该字符为汉字。
</P>
<P> 国标对汉字字库的结构作了统一规定,即将字库分成若干个区,每个区有94个汉字,每个汉字在字库中有确定的区和位,因此每个汉字各有一个区位码,知道了区位码也就相当于知道了汉字在字库中的位置。由于汉字的内码与区位码有一定的关系,所以只要通过汉字的内码就可得到该汉字的区位码,也就得到了该汉字的字模。
</P>
<P> 查找一个汉字字模数据的算法为: <BR> 汉字内码 -> 区位码 -> 记录号 -> 字模数据
<BR> 一个16点阵汉字其字模数据共有32字节,可以看作是一条记录,在程序中可以用一个数组存放。在DOS的图形模式下,汉字是通过描点的方法逐点画上去的。读取字模中每个字节的每一位,就能确定汉字中的每个点。故一个16×16点阵的汉字必须要32个字节的字模数据才能确定。
</P>
<P> 以下是DOS的图形模式下显示一个16×16点阵汉字时的描点顺序图。每两个字节的字模数据确定一行。
<BR> 四、VB6中实现汉字字模转换的技巧
<BR> 在许多工程控制的应用环境中,经常需要对标准的汉字字模进行调整和转换。
<BR> 要对汉字字模进行转换首先应该正确地读出16点阵汉字在字库中的32字节的字模数据。设某一汉字的内码为ddff,其中dd表示区内码,ff表示位内码,则dd-&Ha1为该汉字的区码,ff-&Ha1为该汉字的位码。则该汉字在字库中的位置为:
</P>
<P> Location = [(dd-&Ha1)×94 + (ff-&Ha1)]×32
<BR> 需要注意的是,以何种方式从字库文件中读取这32字节也是一个关键问题。由于二进制(Binary)方式访问文件可以直接查看文件中指定的字节,而且二进制方式也是唯一支持用户到文件的任何位置读写任意长度数据的方法。因而以二进制方式打开汉字字库文件是最适合的。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -