[vb]VB文字编码与Windows记事本的探究
来源:互联网 发布:linux 脚本中修改密码 编辑:程序博客网 时间:2024/06/04 19:25
1、微软的记事本程序的问题
微软的记事本,在保存文件的时候,会默认保存成ANSI格式。
网传在记事本中输入“联通”后,不加修改就直接保存为默认的ANSI格式,之后打开就是乱码。
测试结果显示,输入“联通”默认保存后,字节内容是:193,170|205,168
如果按照UNICODE保存“联通”两个字,从记事本保存的文件中,可以提取出的字节序列是:255,254|84,128|26,144
VB自身的字符是Unicode的,而“联通”两个字的Unicode字节序列是:84,128|26,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无Unicode255,254Unicode Big endian254,255UTF-8239,187,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]VB文字编码与Windows记事本的探究
- VB仿Windows的记事本notepad的程序源代码
- 小型记事本的VB实现
- 我的记事本(vb编写的)
- vb与windows api
- 关于用VB做记事本的程序
- vb.net与vb的比较
- vb与vb.net的不同
- VB与VB.NET的区别
- VB与VB.NET的区别
- VB与VB.net的区别
- vb.net与vb的区别
- 【VB.NET】浅谈VB与VB.NET的关系
- 【VB.NET视频】VB与VB.NET的区别
- VB与VB.NET
- VB.Net与VB
- VB与VB.NET
- VB.NET完成一个功能增强的记事本
- Maven最佳实践:版本管理
- i/O 中断
- 怎样能跳出双重循环?
- WPF中设置DataGrid的一些样式
- Tomcat下JSP、Servlet和JavaBean环境的配置
- [vb]VB文字编码与Windows记事本的探究
- JAVA学习(二)__JAVA中int、String的类型转换
- 分享几个主题给大家希望大家喜欢!!!
- MySQL select into
- Python删除目录下的文件以及文件夹
- Objective-C、Cocoa、Mac、IOS、Cocos2d开发资料及Demo整合
- C&C++中的qsort和sort库函数
- 少编码多思考:代码越多 问题越多
- sharepoint 2010 如何在sharepoint 2010 中使用MSChart图表控件