社区
VB基础类
帖子详情
100分!!请问怎样判断一个字符是不是汉字????(在线等)
bigbox2003
2003-05-17 03:12:51
请问怎样判断一个字符是不是汉字????
...全文
365
8
打赏
收藏
100分!!请问怎样判断一个字符是不是汉字????(在线等)
请问怎样判断一个字符是不是汉字????
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bigbox2003
2003-05-17
打赏
举报
回复
thanks!
Intelement
2003-05-17
打赏
举报
回复
2、实际源程序
以下这段程序是放置在汉字源文本输入框(SrcTxt)的Change事件中。通过判断输入在文本框内的字符的ASCII码是否小于零,就能判断输入的字符是不是汉字。这段程序还能计算汉字字符串的长度。同时把输入的汉字存储在一个临时文件TempSrc.txt中。由于这段代码是放在文本框的Change事件中,它能立即更新汉字个数的显示。
Private Sub SrcTxt_Change( )
Static SStr As String
Dim i As Integer
Dim TempFile, TempFileBinary As String
TotalNum = 0
L = Len(SrcTxt.Text)
For i = 1 To L
tmpStr = StrConv(Mid$(SrcTxt.Text, i, 1), vbWide)
If Asc(Mid$(SrcTxt.Text, i, 1)) < 0 Then
TotalNum = TotalNum + 1
SStr = SrcTxt.Text
Else
MsgBox "写入的不是汉字!"
SrcTxt.Text = Left(SrcTxt.Text, Len(SrcTxt.Text) - 1)
Exit Sub
End If
Next i
LblNum.Caption = Str$(TotalNum) + "个汉字"
TempFile = App.Path + "\" + "TempSrc.txt"
'TempFileBinary = App.Path + "\" + "TempSrcBinary.txt"
Open TempFile For Output As #1
Print #1, SrcTxt.Text
Close #1
End Sub
网上的例子多的是
完
Intelement
2003-05-17
打赏
举报
回复
四、VB6中实现汉字字模转换的技巧
在许多工程控制的应用环境中,经常需要对标准的汉字字模进行调整和转换。
要对汉字字模进行转换首先应该正确地读出16点阵汉字在字库中的32字节的字模数据。设某一汉字的内码为ddff,其中dd表示区内码,ff表示位内码,则dd-&Ha1为该汉字的区码,ff-&Ha1为该汉字的位码。则该汉字在字库中的位置为:
Location = [(dd-&Ha1)×94 + (ff-&Ha1)]×32
需要注意的是,以何种方式从字库文件中读取这32字节也是一个关键问题。由于二进制(Binary)方式访问文件可以直接查看文件中指定的字节,而且二进制方式也是唯一支持用户到文件的任何位置读写任意长度数据的方法。因而以二进制方式打开汉字字库文件是最适合的。
VB6虽然提供了较强的位运算功能,但是对于在字模转换中使用较多的移位操作,却没有提供对应的移位运算符、指令或函数。其实通过and(与)、or(或)二个位运算符即可编制一个自定义子函数来实现移位运算。
下面的自定义子函数就是实现循环右移的:
Public Function byteRight(byte1 As Byte, n As Integer) As Byte '将byte1右移n位
Dim TemVar As Byte '临时变量
Dim TemVar1 As Byte '临时变量
Dim X, Y As Integer
TemVar = byte1
For X = 1 To n '移多少位就循环多少次
For Y = 1 To 8 '从第一位(右边第一位)开始循环右移
Select Case Y
Case 1
If (TemVar And &H1) = &H1 Then '如果临时变量TemVar的第一位是1,
TemVar1 = &H1 '则将临时变量TemVar1置1,
Else
TemVar1 = &H0 '则将临时变量TemVar1置0,
End If
Case 2
If (TemVar And &H2) = &H2 Then '如果临时变量TemVar的第二位是1,
TemVar = TemVar Or &H1 '则将其第一位置1(其它位不变),
Else
TemVar = TemVar And &HFE '反之将第一位置0(其它位不变)
End If
Case 3
If (TemVar And &H4) = &H4 Then '操作与上面相同
TemVar = TemVar Or &H2
Else
TemVar = TemVar And &HFD
End If
Case 4
If (TemVar And &H8) = &H8 Then
TemVar = TemVar Or &H4
Else
TemVar = TemVar And &HFB
End If
Case 5
If (TemVar And &H10) = &H10 Then
TemVar = TemVar Or &H8
Else
TemVar = TemVar And &HF7
End If
Case 6
If (TemVar And &H20) = &H20 Then
TemVar = TemVar Or &H10
Else
TemVar = TemVar And &HEF
End If
Case 7
If (TemVar And &H40) = &H40 Then
TemVar = TemVar Or &H20
Else
TemVar = TemVar And &HDF
End If
Case 8
If (TemVar And &H80) = &H80 Then
TemVar = TemVar Or &H40
Else
TemVar = TemVar And &HBF
End If
If TemVar1 = &H1 Then '移完第八位后,如果TemVar1是1(即第一位是1)
TemVar = TemVar Or &H80 '则将TemVar的第八位置1
Else
TemVar = TemVar And &H7F '反之置0
End If
End Select
Next Y
Next X
byteRight = TemVar '将TemVar的值返回给函数名
End Function
尤其需要注意的是当把二进制数据写入文件中时,必须使用Byte数据类型的数组变量,而不是 String 变量。 String 被认为包含的是字符,而二进制型数据可能无法正确地存在 String 变量中。
Intelement
2003-05-17
打赏
举报
回复
三、汉字字模读写和存储的机理
计算机是以编码的方式来处理和使用字符的。西文字符采用一个字节表示,即ASCII码,一般只用七位来表示128个字符,而把最高位用作奇偶校验(或者不用)。我国国标规定汉字用内码表示,内码为两个字节。为了保证中西文兼容,也就是说汉字系统的内码必须同时允许ASCII码和汉字的使用,两者之间不应发生冲突。目前规定每个字节只用七位,若两个字节的最高位均为1,则该字符为汉字。
国标对汉字字库的结构作了统一规定,即将字库分成若干个区,每个区有94个汉字,每个汉字在字库中有确定的区和位,因此每个汉字各有一个区位码,知道了区位码也就相当于知道了汉字在字库中的位置。由于汉字的内码与区位码有一定的关系,所以只要通过汉字的内码就可得到该汉字的区位码,也就得到了该汉字的字模。
查找一个汉字字模数据的算法为:
汉字内码 -> 区位码 -> 记录号 -> 字模数据
一个16点阵汉字其字模数据共有32字节,可以看作是一条记录,在程序中可以用一个数组存放。在DOS的图形模式下,汉字是通过描点的方法逐点画上去的。读取字模中每个字节的每一位,就能确定汉字中的每个点。故一个16×16点阵的汉字必须要32个字节的字模数据才能确定。
以下是DOS的图形模式下显示一个16×16点阵汉字时的描点顺序图。每两个字节的字模数据确定一行。
bydisplay
2003-05-17
打赏
举报
回复
汉字源文本输入框(SrcTxt)的Change事件中。通过判断输入在文本框内的字符的ASCII码是否小于零,就能判断输入的字符是不是汉字。这段程序还能计算汉字字符串的长度。同时把输入的汉字存储在一个临时文件TempSrc.txt中。由于这段代码是放在文本框的Change事件中,它能立即更新汉字个数的显示。
Private Sub SrcTxt_Change( )
Static SStr As String
Dim i As Integer
Dim TempFile, TempFileBinary As String
TotalNum = 0
L = Len(SrcTxt.Text)
For i = 1 To L
tmpStr = StrConv(Mid$(SrcTxt.Text, i, 1), vbWide)
If Asc(Mid$(SrcTxt.Text, i, 1)) < 0 Then
TotalNum = TotalNum + 1
SStr = SrcTxt.Text
Else
MsgBox "写入的不是汉字!"
SrcTxt.Text = Left(SrcTxt.Text, Len(SrcTxt.Text) - 1)
Exit Sub
End If
Next i
LblNum.Caption = Str$(TotalNum) + "个汉字"
TempFile = App.Path + "\" + "TempSrc.txt"
'TempFileBinary = App.Path + "\" + "TempSrcBinary.txt"
Open TempFile For Output As #1
Print #1, SrcTxt.Text
Close #1
End Sub
Intelement
2003-05-17
打赏
举报
回复
二、确定汉字字符串的长度
各个版本的VB对汉字字符的长度定义并不相同。在Windows 3.x中,VB3中认为每个汉字的长度为2字节。VB自从32位版本以後,不管中英文字,均以2 bytes来储存,这与中文Win95的汉字内核有关。但是VB4以后,VB认为每个汉字的长度为1。这在处理包含汉字的字符串时带来很多的不便。
由于Len、Left、Mid等字符串函数认为一个汉字和一个西文字符的长度都为1,因此处理汉字字符串时有一定的难度。实现上必须要能把汉字按照两个字符(字节)的形式读出。因此在截取汉字字符串的子串时需特别注意。
由于汉字处理和汉字字模存储的特殊性,在许多情况下我们希望汉字字符的长度为2,英文字符为1。由于VB5和VB6把一个汉字作为一个字符。因此处理汉字时首先必须能正确判断汉字字符串的长度。
在VB3或C++里,汉字的 ASCII码均大于零,而VB5和VB6中汉字的ASCII码小于0。因此通过判断一个未知字符的ASCII码就可以判断该字符是否汉字。
这里我们提供了两种方法来判断汉字字符串的长度。
1、方法1
VB6中提供了LenB函数用于字符串中的字节数据。如同在双字节字符集(DBCS)语言中一样,LenB返回的是用于代表字符串的字节数,而不是返回字符串中字符的数量。如为用户自定义类型,LenB返回在内存中的大小。
LenB(StrConv(Str1,vbFormUnicode))
对要处理的字符串Str1,必须先使用StrConv函数把ANSI格式的Byte数组转换为字符串,否则直接使用LenB函数得到的结果比实际结果大。
2、方法2
这里自定义了一个子函数CLen来计算汉字字符串的实际长度。同时还能判断字符串中汉字的实际个数。
Function CLen(HzStr$) as Integer
Static HzNum as Integer
L = len(HzStr$)
For n=1 to L
If Asc(mid$( HzStr$,n,1))<0 Then HzNum = HzNum + 1
Next n
Clen = L + HzNum
End Function
CLen函数中的静态变量HzNum返回字符串中实际汉字的数目。
Intelement
2003-05-17
打赏
举报
回复
一、VB6对汉字处理的支持
对汉字处理,VB6主要是提供了一些输入法设置方面的支持。它提供了一个ImeMode属性和ImeStatus函数来确定和设置输入法的状态。而且此属性和方法只在VB6的东亚区版本中有效。
IMEStatus函数返回一个整数,用来指定当前Windows的输入法(IME)方式。
下面是中文地区的返回值:
常数 值 描述
vbIMENoOP 0 不安装IME(缺省)
vbIMEOn 1 打开IME
ImeMode属性返回或者设置被选定的对象的 IME (Input Method Editor,输入方法编辑器)状态。
可以先用ImeStatus函数来检测当前的输入状态,并用IMEMode来控制其输入状态。
如Text1.IMEMode=0(预定值)、=1(切换为中文输入)、=2(切换为英文输入)
对于简体汉字和繁体汉字 IME,只能使用设置 0 到 2。设置 3 到 10 对于汉字系统是无效的。
VB6功能上对汉字处理的直接支持也仅限于此。对于汉字字符串的处理,VB6并没有提供专门的函数和方法。
Intelement
2003-05-17
打赏
举报
回复
希望这个对你有帮助(其实对我自己也有帮助啦 ^_^)
VisualBasic 6编程中的汉字处理
在DOS时代,拥有一个华丽的汉字菜单几乎是每个高档中文应用程序必须的包装。中文Windows操作系统的出现使得高级开发平台实现全中文的提示和界面非常容易和方便。在一般的应用程序中已经很少需要去专门考虑汉字处理的问题。
但是在许多工程控制和字符串处理的环境中,汉字字符的处理仍然有别于西文字符的处理,需要加以专门的考虑。
一、VB6对汉字处理的支持
对汉字处理,VB6主要是提供了一些输入法设置方面的支持。它提供了一个ImeMode属性和ImeStatus函数来确定和设置输入法的状态。而且此属性和方法只在VB6的东亚区版本中有效。
IMEStatus函数返回一个整数,用来指定当前Windows的输入法(IME)方式。
下面是中文地区的返回值:
常数 值 描述
vbIMENoOP 0 不安装IME(缺省)
vbIMEOn 1 打开IME
ImeMode属性返回或者设置被选定的对象的 IME (Input Method Editor,输入方法编辑器)状态。
可以先用ImeStatus函数来检测当前的输入状态,并用IMEMode来控制其输入状态。
如Text1.IMEMode=0(预定值)、=1(切换为中文输入)、=2(切换为英文输入)
对于简体汉字和繁体汉字 IME,只能使用设置 0 到 2。设置 3 到 10 对于汉字系统是无效的。
VB6功能上对汉字处理的直接支持也仅限于此。对于汉字字符串的处理,VB6并没有提供专门的函数和方法。
IOS-粉色系PPT模版.ppt
IOS-粉色系PPT模版.ppt
基于python实现的煤矿井下安全生产检测系统+源码+pyQt界面+项目文档(毕业设计&课程设计&项目开发)
基于python实现的煤矿井下安全生产检测系统+源码+pyQt界面+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 煤矿井下生产环境恶劣,为保障井下人员的安全,需要实时对井下各种环境因素进行监控,监控数据主要
分
为两大类,第一类为模拟量:如甲烷,瓦斯,氧气,一氧化碳、二氧化碳、温度等(结果以数值表示),第二类为开关量:例如通风风机、设备运行状态、馈电传感器等(结果以0\1 表示,代表两个状态,0代表断开状态,1代表接通状态)。 系统
分
为上位机(计算机)和下位机(嵌入式系统),通过网络通信。下位机连接各种传感器,并设置多个继电器(进出端口,可实现对传感器的通断电),并将传感器数据定时上传到上位机(每5秒上传一次;如果传感器数值发生变化,则立即上传)。上位机收到下位机数据后,要显示收到的各个传感器的数值或者状态,并且根据控制规则向下位机传输控制数据,从而对各个传感器进行控制
前端
分
析-2023071
100
78988
前端
分
析-2023071
100
78988
QT6 模型视图架构里的列表视图 QListView 的源代码带注释
QT6 模型视图架构里的列表视图 QListView 的源代码带注释。
欧洲互联网金融发展对我国商业银行的启示.docx
欧洲互联网金融发展对我国商业银行的启示.docx
VB基础类
7,785
社区成员
197,585
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章