VB UTF-8 问题 80
有一个文件,文件名是UTF-8当然文件很多也有其它编码的,所以就举例。文件内容也是UTF-8现在遇到的问题是文件不能打开文件内容无法读取1.试着随便新建个工程放个文本框,...
有一个文件,文件名是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自动转换再赋值的问题如何解决,这一现象是为什么。
能回答多少算多少吧。 展开
文件内容也是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自动转换再赋值的问题如何解决,这一现象是为什么。
能回答多少算多少吧。 展开
3个回答
展开全部
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
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
展开全部
尝试用 StrConv() 函数看有没有帮助,例如:
FileName = StrConv(UFileName, vbFromUnicode)
再不就要研究一下相关的 Windows API 了...
FileName = StrConv(UFileName, vbFromUnicode)
再不就要研究一下相关的 Windows API 了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.没考虑过
2. FileOpen(1, "", OpenMode.Binary)'VB.NEt2010的代码..VB6也应该差不多
3.请吧单双字节考虑进去,否则还是以二进制的方法读取文件
4.没考虑过,不过文字本质都是些图片不转换用不了吧
2. FileOpen(1, "", OpenMode.Binary)'VB.NEt2010的代码..VB6也应该差不多
3.请吧单双字节考虑进去,否则还是以二进制的方法读取文件
4.没考虑过,不过文字本质都是些图片不转换用不了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询