VB中汉字编码转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三、字符串与数组转换
前人在使用 VB 的过程总结了三种方法用来操作 VB 的字符串,但使用方法不当还是乱码频出,这里 总结一下,其实很简单。
3.1、直接赋值
在 VB 中 Byte 数组和 String 变量之间可以直接赋值,这点非常强,但很多程序员不知道这个语 法,还写了(或者找了)很多代码来实现。为了加强说明,我们先准备几个样本: “测试 abc123”这个字符串的各种编码格式如下(Windows 顺序,16 进制): GB2312 :B2 E2 CA D4 61 62 63 31 32 33 Unicode:4B 6D D5 8B 61 00 62 00 63 00 31 00 32 00 33 00 UTF-8 :E6 B5 8B E8 AF 95 61 62 63 31 32 33 现在看第一段代码: Dim buff() As Byte ‘ Dim strRet As String ‘ buff = "测试 abc123" strRet = buff ‘Buff 内容是 Unicode 的内容 ‘strRet 内容就是"测试 abc123"
简单吧, 我们的问题也许是要输出 GB2312, 毕竟文件内容是 GB2312 的格式, 那么需要转换一下, strRet = StrConv(buff, vbFromUnicode) strRet = StrConv("测试 abc123", vbFromUnicode) buff = StrConv("测试 abc123", vbFromUnicode) 上面这三句效果是等效的,第三行其实执行了两次,如果要了解这个过程,看下一节着重介绍。 当然了,转换后的 GB2312 的内容是在 VB 中是乱码了。
strRet = StrConv(buff, vbUnicode) buff = strRet
上面这段代码转换之后 Buff 数组的内容是: 4B 00 6D 00 CE 8A 61 00 00 00 62 00 00 00 63 00 00 00 31 00 00 00 32 00 00 00 33 00 00 00 发生了什么?ASCII 字节后面添加了一个 0 字节,长度增加了!但“试”字转换之后变成了 “娢”字,还是认为输入的字符串是 GB。为了了解这个函数,我们看看函数的定义:
yangpo
第 2 页
2009-7-1
Baidu Nhomakorabea
VB6 字符串操作总结
一、前言
计算机中汉字的编码比较多,ASCII 码不用转换,麻烦的是汉字,无论是使用 C 语言还是解释性语 言都头痛这些编码的识别和转换,VB 中因为函数稀少和无位操作函数显得尤其费劲,我们要解决的 问题: 1、 了解各个编码的区别; 2、 各个编码之间互相转换; 3、 输入输出的问题
设置 conversion 参 数 的 设 置 如 下 : 常量 vbUpperCase vbLowerCase vbProperCase vbWide* vbNarrow* vbKatakana** vbHiragana** vbUnicode vbFromUnicode 1 2 3 4* 8* 16** 32** 64 128 值 说明 将字符串转换为大写字符。 将字符串转换为小写字符。 将字符串中每个词的第一个字母转换为大写形式。 将字符串中的窄(单字节)字符转换为宽(双字节)字符。 将字符串中的宽(双字节)字符转换为窄(单字节)字符。 将字符串中的平假名字符转换为片假名字符。 将字符串中的片假名字符转换平假名字符。 使用系统的默认代码页将字符串转换为 Unicode 格式。 将字符串从 Unicode 格式转换为系统的默认代码页。
二、常见的代码说明
汉字结构中,参见的编码是 GB2312 和 Unicode,其中 GB2312、GBK、GB18030 统称为 GB 系 列, 是中国简体中文的国家标准, GB2312 收录 6763 个汉字, GBK 收录 20912 个汉字, 最新的 GB18030 收录 27533 个汉字。在本文中 GB2312 代表了上述的三种格式。 GB13000.1 、 CJK 、 GB2312-80 是 Unicode 码,他们是 Unicode 的一个子集,其中 CJK 是是亚洲语言的合集,包含 BIG5 。 Unicode 是 UCS 的子集, UCS 是 4 个字节代表一个字符 (汉字) , Unicode 则分为 UTF-32 、 UTF-16 和 UTF-8 三种格式,在 Windows 和 Unix 上因 为高低位顺序的不同又增加了两种区别, 常见的格式是 UTF-16 (即俗称的 Unicode ) 和 UTF-8 两种格式,其中 UTF-16 作为 Windows 的标准内码而为人所知,后面的文章中也把 Unicode 作为 UTF-16 的简写。有意思的是 UTF-32 是固定 4 字节格式, UTF-16 是固定 2 字节格式, 而 UTF-8 是汉字三字节的,英文数字式单字节,这点需要特别注意。 VB 是 Unicode 内码,这点很厉害,当然了也给输入输出带来不少麻烦,程序员必须谨记 VB 的字符串是 Unicode 码,如果直接当 GB2312 使用,那么任何乱码都是有可能的。
yangpo 第 3 页 2009-7-1
VB6 字符串操作总结
总结: 1、 VB 中数组和字符串直接赋值功能非常强大; 2、 转换后严格遵循原内容的编码体系,不会发生错乱;
3.2、使用Strconv函数
Strconv 使用率比较高,最早的时候写串口通信程序,就有这么一句: ' The OnComm event is used for trapping communications events and errors. Private Static Sub MSComm1_OnComm() Dim EVMsg$ Dim ERMsg$ ' Branch according to the CommEvent property. Select Case MSComm1.CommEvent ' Event messages. Case comEvReceive Dim Buffer As Variant Buffer = MSComm1.Input Debug.Print "Receive - " & StrConv(Buffer, vbUnicode) ShowData txtTerm, (StrConv(Buffer, vbUnicode))
yangpo
第 4 页
2009-7-1
VB6 字符串操作总结
StrConv 函数
返 回 一 个 按 照 指 定 方 式 转 换 的 Variant (String) 值 。 语法 StrConv(string, conversion [, LCID ] ) StrConv 函 数 的 语 法 包 含 以 下 参 数 : 参数 string conversion LCID 必选。要转换的字符串表达式。 必选。Integer 类型的值,是指定要执行的转换类型的值的总和。 可选。 如果 LocaleID 不是系统 LocaleID, 则在此处指定。 (系统 LocaleID 是默认值。 ) 说明
VB6 字符串操作总结

者:杨珀
编写时间:2009 年 6 月 23 日 修改时间:2009 年 7 月 1 日
VB6 字符串操作总结
目录
一、 前言.........................................................................................................................................................................3 二、 常见的代码说明 .....................................................................................................................................................3 三、 字符串与数组转换 .................................................................................................................................................3 3.1、 直接赋值 ............................................................................................................................................................3 3.2、 使用 STRCONV 函数 ...........................................................................................................................................4 四、 文件的读写 .............................................................................................................................................................7 五、 VB 中字符函数的误差 ..........................................................................................................................................8 六、 UTF-8 .....................................................................................................................................................................9 七、 编码的判断 ...........................................................................................................................................................12 7.1、 区分汉字与 ASCII...........................................................................................................................................12 7.2、 区分 GB 系列与 UNICODE ...............................................................................................................................13 八、 区域设置 ID (LCID) 表 .....................................................................................................................................14
刚开始的时候的确没搞明白这个 StrConv 函数有什么作用,因为: 1、 当时串口传输的全部是 ASCII 码,没有中文,是否使用这个没有区别; 2、 当时还以为所有的字符串都是 Unicode 呢, 呵呵, 毕竟 Windows 和 VB 全部是 Unicode 内码。 现在知道这段代码很严谨的,但如果发送的对方也是这么严谨,把字符串先转换成 Unicode 然后再发送,那上面的代码就错了,可见握手的协议很重要,需要两个巴掌才能拍得响。为了 说明这个问题,我们举个例子: Dim buff() As Byte Dim strRet As String buff = "测试 abc123" ' ' 'Buff 内容是 Unicode 的内容
相关文档
最新文档