加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 08:19:08 所属栏目:百科 来源:网络整理
导读:1、微软的记事本程序的问题 微软的记事本,在保存文件的时候,会默认保存成ANSI格式。 网传在记事本中输入“联通”后,不加修改就直接保存为默认的ANSI格式,之后打开就是乱码。 测试结果显示,输入“联通”默认保存后,字节内容是:193,170|205,168 如果按

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字符。


继续测试:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读