windows内部采用的是unicode编码,VB中同样的使用unicode编码
假设一个目录下面又一个文件叫做"编码.xls"
用VB的dir理论上应该能够得到unicode编码,但是实际上表示为问号的unicode编码。
这里不存在编码转换的问题,为何出现这样的现象,请各位指点。
代码如下:(f:\c32asm\下有编码.xls)
Dim b() As Byte
b = Dir("f:\c32asm\")
Open "f:\x.txt" For Binary Access Write As #1
Put #1, , b
Close #1
假设一个目录下面又一个文件叫做"编码.xls"
用VB的dir理论上应该能够得到unicode编码,但是实际上表示为问号的unicode编码。
这里不存在编码转换的问题,为何出现这样的现象,请各位指点。
代码如下:(f:\c32asm\下有编码.xls)
Dim b() As Byte
b = Dir("f:\c32asm\")
Open "f:\x.txt" For Binary Access Write As #1
Put #1, , b
Close #1
二进制表示为3F 00 3F 00 2E 00 78 00 6C 00 73 00(??.xls的unicode编码)
在explorer中是正常显示的
而且这不是显示的问题
写到文件中的内码就不对
b = Dir("f:\c32asm\")
之后,你测试输出数组一下,看看是否正确
用API的FindFirstFile也一样
照说至少API返回的内码应该是正确的
百思不得其解
用API的FindFirstFile也一样这个是正常的,返回结果的编码肯定是当前操作系统的,所以你的工作就是进行编码转换,用下面的两个api:
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As LongPrivate Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
事实上b = Dir("f:\c32asm\")返回的就是unicode编码
假如("f:\c32asm\")下存在的是“遍码.xls”而不是“编码.xls”
那么字节数组b的前两个字节是144,77,对应的数值是904D,而这正是“遍”的unicode编码
现在的问题是“码”返回的是00 3F,即问号对应的unicode编码
如何使得“码”能返回正确的unicode编码呢
那么字节数组b的前两个字节是144,77,对应的数值是904D,而这正是“遍”的unicode编码
现在的问题是“码”返回的是00 3F,即问号对应的unicode编码你能肯定这不是巧合吗?
不是巧合
遍的ShiftJis(日文编码)是95D5
用附件里面编码表工具能够看出来TO:oho1937(压舟熊疯)
那么为什么在Explorer中能够看到呢
IE必须要安支持日文编码,否则一样无法解析。这和unicode扯不上联系。给你个参考:http://www.mailer.com.cn/article/articleview/1109/1/195/一般情况是按内码字库去分析编码解析,繁体的我做过,至于日文的那就不清楚了
但是不管VB有没有这个功能
我要显示得到这几个汉字的内码
肯定能够实现吧
因为explorer里面是能够正确显示的
这个肯定是前提
那么ie是如何显示的?