VB UTF-8 问题

有一个文件,文件名是UTF-8 当然 文件很多也有其它编码的,所以就举例。
文件内容也是UTF-8
现在遇到的问题是 文件不能打开
文件内容无法读取
1.试着随便新建个工程放个文本框,运行后将文件名复制 进去不能正常显示
2.文件读取过程中 调试发现在处理时VB先将数据自动转换编码再赋给变量,造成所有转换函数没有作用。
3假如文件名可以正常读取(例如为英文或者UTF-8字符有时候能读取)但是文件内容包含UTF-8时还可以考虑二进制,但是对于文件名就没有什么好的办法

申明 可能我遇到的并不是UTF-8 ,但是确认VB会自动转换编码,这个就是问题所在,
其次如果叫我手动转换什么的,就不要回答了,我还笨到不会转换,现在是VB遇到了一个很小,但是很麻烦的问题,
这个问题困扰许久 基本就是VB 编码 Unicode 之类的。问了好几次,没有解决,弄得我的程序一直停在那里。望高手解决
1 如何解决Unicode 包括 UTF-8 -16 之类的
2 如何以二进制的方法读取文件名
3如何读取含有utf-8 就是乱码的文件名
4对于VB自动转换再赋值的问题如何解决,这一现象是为什么。
能回答多少算多少吧。

Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 = 65001

Function Utf8ToUnicode(ByRef Utf() As Byte) As String
Dim lRet As Long
Dim lLength As Long
Dim lBufferSize As Long
lLength = UBound(Utf) - LBound(Utf) + 1
If lLength <= 0 Then Exit Function
lBufferSize = lLength * 2
Utf8ToUnicode = String$(lBufferSize, Chr(0))
lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(Utf(0)), lLength, StrPtr(Utf8ToUnicode), lBufferSize)
If lRet <> 0 Then
Utf8ToUnicode = Left(Utf8ToUnicode, lRet)
End If
End Function

Private Sub Form_Load()
Dim a As String
Dim b() As Byte
Dim i As Integer

a = "E9 A2 91 E9 81 93 31 00"

ReDim b(UBound(Split(a, " ")) - 1) As Byte
For i = 0 To UBound(Split(a, " ")) - 1
b(i) = "&H" & Split(a, " ")(i)
Next i

Text1.Text = Utf8ToUnicode(b())

End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-15
尝试用 StrConv() 函数看有没有帮助,例如:
FileName = StrConv(UFileName, vbFromUnicode)
再不就要研究一下相关的 Windows API 了...
第2个回答  2011-04-20
1.没考虑过
2. FileOpen(1, "", OpenMode.Binary)'VB.NEt2010的代码..VB6也应该差不多
3.请吧单双字节考虑进去,否则还是以二进制的方法读取文件
4.没考虑过,不过文字本质都是些图片不转换用不了吧
相似回答