Webbrowser中重命名输入中文乱码问题

xiangyueming 2017-10-19 11:26:54

利用Webbrowser控件,对文件夹进行重命名的时候,输入中文会变成乱码

源码下载地址:http://pan.baidu.com/s/1c2hd6zI

...全文
466 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
利用Webbrowser控件,对文件夹进行重命名的时候,输入中文会变成乱码
弄了几年,用了3种方法实现。一种是打开我的电脑套进去,不同系统资源管理器不一样,这个难度较大,但是功能最强,是完整的功能。
第2种方法**,完美,用的是指针相关的
第3种方法**,比较变态的,只有vb才有的玩意,出错的情况下意外实现了
有需要的联系:QQ2776478814
xiangyueming 2017-10-30
  • 打赏
  • 举报
回复
加你Q了,请指教
  • 打赏
  • 举报
回复
搞定没有:QQ2776478814,我搞定了
舉杯邀明月 2017-10-23
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
照你这么说,什么SQL注入之流都只是浮云了?(虽然我承认这句话99%属于狡辩)
你过谦了吧! 才99%?明显是 100% 嘛…………
赵4老师 2017-10-23
  • 打赏
  • 举报
回复
照你这么说,什么SQL注入之流都只是浮云了?(虽然我承认这句话99%属于狡辩)
舉杯邀明月 2017-10-23
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 8 楼 Chen8013 的回复:] [quote=引用 7 楼 zhao4zhong1 的回复:] 汉字编码转换供楼主参考:
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
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 Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8   =65001
const cpGB2312 =  936
const cpGB18030=54936
const cpUTF7   =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
    Dim bufSize As Long
    bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
    MultiByteToUTF16 = Space(bufSize)
    MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
    Dim bufSize As Long
    Dim arr() As Byte
    bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
    ReDim arr(bufSize - 1)
    WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
    UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
    MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

参考个鬼!!!目前楼主的“操作方法”,程序代码根本就无法干涉到“字符编码”传递过程! [/quote] 那没准,万一伦家支持\x...或\u...呢?[/quote] 不在于是否“支持”,关键在于: 在Webbrowser控件中进行“更名操作”时,直接就是“Web控件 ←→ 操作系统”之间的交互了,“自己的代码”根本无法参与其中的过程! 你那个编码转换函数,有个鸟用? 你好像是安装了VB6的吧,没看看?没试试?
赵4老师 2017-10-23
  • 打赏
  • 举报
回复
引用 8 楼 Chen8013 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] 汉字编码转换供楼主参考:
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
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 Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8   =65001
const cpGB2312 =  936
const cpGB18030=54936
const cpUTF7   =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
    Dim bufSize As Long
    bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
    MultiByteToUTF16 = Space(bufSize)
    MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
    Dim bufSize As Long
    Dim arr() As Byte
    bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
    ReDim arr(bufSize - 1)
    WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
    UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
    MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

参考个鬼!!!目前楼主的“操作方法”,程序代码根本就无法干涉到“字符编码”传递过程! [/quote] 那没准,万一伦家支持\x...或\u...呢?
舉杯邀明月 2017-10-23
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
汉字编码转换供楼主参考:
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
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 Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8   =65001
const cpGB2312 =  936
const cpGB18030=54936
const cpUTF7   =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
    Dim bufSize As Long
    bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
    MultiByteToUTF16 = Space(bufSize)
    MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
    Dim bufSize As Long
    Dim arr() As Byte
    bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
    ReDim arr(bufSize - 1)
    WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
    UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
    MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

参考个鬼!!!目前楼主的“操作方法”,程序代码根本就无法干涉到“字符编码”传递过程!
赵4老师 2017-10-23
  • 打赏
  • 举报
回复
汉字编码转换供楼主参考:
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
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 Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8   =65001
const cpGB2312 =  936
const cpGB18030=54936
const cpUTF7   =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
    Dim bufSize As Long
    bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
    MultiByteToUTF16 = Space(bufSize)
    MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
    Dim bufSize As Long
    Dim arr() As Byte
    bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
    ReDim arr(bufSize - 1)
    WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
    UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
    MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

赵4老师 2017-10-23
  • 打赏
  • 举报
回复
引用 12 楼 Chen8013 的回复:
[quote=引用 11 楼 zhao4zhong1 的回复:] 照你这么说,什么SQL注入之流都只是浮云了?(虽然我承认这句话99%属于狡辩)
你过谦了吧! 才99%?明显是 100% 嘛………… [/quote] 没准1%概率WebBrowser里面的输入框中输入的字符串可以接受转义字符或遭受缓冲区溢出攻击。
舉杯邀明月 2017-10-21
  • 打赏
  • 举报
回复
引用 5 楼 xiangyueming 的回复:
[quote=引用 3 楼 Chen8013 的回复:] 肯定是“字符编码”的原因,但这个接口又不受程序代码控制,看对象属性,也没有什么可设置的地方。 只是:你为什么要用这种方式来操作?
求推荐更好用的实现类似于资源管理器的方法[/quote] 你的想法、最终目的是什么? 目前不清楚具体细节的情况下,建议: 显示用ListView控件; “更名”可以用VB语句实现,也可以用“DOS命令”后台操作。
xiangyueming 2017-10-20
  • 打赏
  • 举报
回复
引用 1 楼 of123 的回复:
可能与网段所用的传输协议有关。有些网段是将传输字节限制为 7-bit 的。这样,Unicode 码会丢失信息。不仅是中文这样的东方文字的字符,像德文、法文这样有编码大于 127 字符的,也出乱码。 为了适应这种情况,网络专家开发出了 UTF7 (7-bit Unicode Transformation Format)。 你也可以尝试换换不同的传输格式。
我这个是本地段重命名输入中文乱码,不是服务端的
of123 2017-10-20
  • 打赏
  • 举报
回复
可能与网段所用的传输协议有关。有些网段是将传输字节限制为 7-bit 的。这样,Unicode 码会丢失信息。不仅是中文这样的东方文字的字符,像德文、法文这样有编码大于 127 字符的,也出乱码。 为了适应这种情况,网络专家开发出了 UTF7 (7-bit Unicode Transformation Format)。 你也可以尝试换换不同的传输格式。
xiangyueming 2017-10-20
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
肯定是“字符编码”的原因,但这个接口又不受程序代码控制,看对象属性,也没有什么可设置的地方。 只是:你为什么要用这种方式来操作?
求推荐更好用的实现类似于资源管理器的方法
赵4老师 2017-10-20
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
舉杯邀明月 2017-10-20
  • 打赏
  • 举报
回复
肯定是“字符编码”的原因,但这个接口又不受程序代码控制,看对象属性,也没有什么可设置的地方。 只是:你为什么要用这种方式来操作?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧