[vb]VB文字编码与Windows记事本的探究

前端之家收集整理的这篇文章主要介绍了[vb]VB文字编码与Windows记事本的探究前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、微软的记事本程序的问题

微软的记事本,在保存文件的时候,会默认保存成ANSI格式。

网传在记事本中输入“联通”后,不加修改就直接保存为默认的ANSI格式,之后打开就是乱码。

测试结果显示,输入“联通”默认保存后,字节内容是:193,170|205,168

如果按照UNICODE保存“联通”两个字,从记事本保存的文件中,可以提取出的字节序列是:255,254|84,128|26,144


VB自身的字符是Unicode的,而“联通”两个字的Unicode字节序列是:84,144

从此可以看出:微软的记事本通过为显示内容增加:255,254这两个字节的数据,来标记Unicode文本。


然后,发现微软的记事本对于ANSI格式文件不做任何的标记


对于Unicode Big endian的编码,则是使用:254,255进行标记


总结下,以“孙”字保存为例:

203,239 ansi
255,254,89,91 unicode
254,255,91,89 unicode big endian
239,187,191,229,173,153 utf-8

所以各个编码对应的,在NotePad中的标准头分别为:

编码类型 文字编码字节内容
ANSI
Unicode 255,254
Unicode Big endian 254,255
UTF-8 239,191


接下来,vb中的StrConv函数,是进行字符编码转换的,但是其中的各个常数对应的编码到底是什么关系呢?

下面进行探索。基于这样的一个基础知识:VB6.0中,字符使用的是Unicode编码进行保存。同样,为了节约时间,使用“孙”字进行测试。

Private Sub Command3_Click()
Dim k As String
Dim b() As Byte
k = "孙"
k = StrConv(k,vbFromUnicode)
b = k
Text1.Text = showByte(b)
End Sub

这里将Unicode的“孙”字,用StrConv函数,转换成“vbFromUnicode”(字面上)。从百度的结果看,vbFromUnicode是指系统的默认代码页。

上述代码执行后,返回的结果是:“203,239”,是符合ANSI的“孙”字编码。也就是说,我的系统默认编码页是ANSI,这个vbFromUnicode就是将Unicode字符转换为ANSI字符。


继续测试:

猜你在找的VB相关文章