100分!!请问怎样判断一个字符是不是汉字????(在线等)

bigbox2003 2003-05-17 03:12:51
请问怎样判断一个字符是不是汉字????
...全文
378 8 打赏 收藏 转发到动态 举报
写回复
用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并没有提供专门的函数和方法。

在信息技术快速发展的背景下,构建高效的数据处理与信息管理平台已成为提升企业运营效能的重要途径。本文系统阐述基于Pentaho Data Integration(简称Kettle)中Carte组件实现的任务管理架构,重点析在系统构建过程中采用的信息化管理方法及其技术实现路径。 作为专业的ETL(数据抽取、转换与加载)工具,Kettle支持从多样化数据源获取信息,并完成数据清洗、格式转换及目标系统导入等操作。其内置的Carte模块以轻量级HTTP服务器形态运行,通过RESTful接口提供作业与转换任务的远程管控能力,特别适用于需要布式任务调度与状态监控的大规模数据处理环境。 在人工智能应用场景中,项目实践常需处理海量数据以支撑模型训练与决策析。本系统通过整合Carte服务功能,构建具备智能调度特性的任务管理机制,有效保障数据传递的准确性与时效性,并通过科学的并发控制策略优化系统资源利用,从而全面提升数据处理效能。 在系统架构设计层面,核心目标在于实现数据处理流程的高度自动化,最大限度减少人工干预,同时确保系统架构的弹性扩展与稳定运行。后端服务采用Java语言开发,充利用其跨平台特性与丰富的类库资源构建稳健的服务逻辑;前端界面则运用HTML5、CSS3及JavaScript等现代Web技术,打造直观的任务监控与调度操作界面,显著提升管理效率。 关键技术要素包括: 1. Pentaho数据集成工具:提供可视化作业设计界面,支持多源数据接入与复杂数据处理流程 2. Carte服务架构:基于HTTP协议的轻量级服务组件,通过标准化接口实现远程任务管理 3. 系统设计原则:遵循模块化与层架构理念,确保数据安全、运行效能与系统可维护性 4. Java技术体系:构建高可靠性后端服务的核心开发平台 5. 并发管理机制:通过优先级调度与资源配算法实现任务执行秩序控制 6. 信息化管理策略:注重数据实时同步与系统协同运作,强化决策支持能力 7. 前端技术组合:运用现代Web标准创建交互式管理界面 8. 布式部署方案:依托Carte服务实现多节点任务发与状态监控 该管理系统的实施不仅需要熟练掌握Kettle工具链与Carte服务特性,更需统筹Java后端架构与Web前端技术,最终形成符合大数据时代企业需求的智能化信息管理解决方案。 资源来源于网络享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【数据融合】【状态估计】基于KF、UKF、EKF、PF、FKF、DKF卡尔曼滤波KF、无迹卡尔曼滤波UKF、拓展卡尔曼滤波数据融合研究(Matlab代码实现)内容概要:本文围绕状态估计与数据融合技术展开,重点研究了基于卡尔曼滤波(KF)、无迹卡尔曼滤波(UKF)、扩展卡尔曼滤波(EKF)、粒子滤波(PF)、固定增益卡尔曼滤波(FKF)和布式卡尔曼滤波(DKF)等多种滤波算法的理论与Matlab代码实现,涵盖其在非线性系统、多源数据融合及动态环境下的应用。文中结合具体案例如四旋翼飞行器控制、水下机器人建模等,展示了各类滤波方法在状态估计中的性能对比与优化策略,并提供了完整的仿真代码支持。此外,还涉及信号处理、路径规划、故障诊断等相关交叉领域的综合应用。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、机器人、导航与控制系统开发的工程技术人员。; 使用场景及目标:①深入理解各类卡尔曼滤波及其变种的基本原理与适用条件;②掌握在实际系统中进行状态估计与数据融合的建模与仿真方法;③为科研项目、论文复现或工程开发提供可运行的Matlab代码参考与技术支撑; 阅读建议:建议结合文中提供的Matlab代码逐项运行与调试,对照算法流程理解每一步的数学推导与实现细节,同时可拓展至其他非线性估计问题中进行对比实验,以提升对滤波算法选型与参数调优的实战能力。

7,787

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧