vb 字符串由ansi转 utf8代码

perfume_lily 2011-04-26 03:27:31
如题
...全文
351 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2011-04-26
  • 打赏
  • 举报
回复
融汇贯通才是最重要的
Tiger_Zhao 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 perfume_lily 的回复:]这个问题不是没解决吗[/Quote]
楼主太监了不等于方法没用。
现在还是人类 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 perfume_lily 的回复:]
我要是能百度到 还来这问吗
[/Quote]
你的问题在网上早就有资料了,百度一定能找到,只是用不用心,想不想找的个人问题。
像这种问题,即使CSDN也回答过不知多少贴,你都不去搜索一下就问了,别人给你连接
也是当然的。
dbcontrols 2011-04-26
  • 打赏
  • 举报
回复
这不帮你找了么
上面的代码试过了?

[Quote=引用 12 楼 perfume_lily 的回复:]
引用 10 楼 dbcontrols 的回复:
来个狠点地
http://www.baidu.com/s?tn=iewz_dg&ch=2&bs=ansi+%D7%AA+utf8+dim&f=8&wd=ansi+%D7%AA+utf8+dim

我要是能百度到 还来这问吗
[/Quote]
perfume_lily 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dbcontrols 的回复:]
来个狠点地
http://www.baidu.com/s?tn=iewz_dg&ch=2&bs=ansi+%D7%AA+utf8+dim&f=8&wd=ansi+%D7%AA+utf8+dim
[/Quote]
我要是能百度到 还来这问吗
dbcontrols 2011-04-26
  • 打赏
  • 举报
回复
UTF-8在VB中是以字符串的形式显示的...字符串是2位而UTF是3位...所以必定产生乱码...在此最好的解决办法就是用本函数啦~
Option Explicit

Private Const CP_ACP = 0 ' default to ANSI code page

Private Const CP_UTF8 = 65001 ' default to UTF-8 code page

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 Declare Function WideCharToMultiByte Lib "kernel32" (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

Private Function EncodeToBytes(ByVal sData As String) As Byte() ' Note: Len(sData) > 0
Dim aRetn() As Byte
Dim nSize As Long

nSize = WideCharToMultiByte(CP_UTF8, 0, StrPtr(sData), -1, 0, 0, 0, 0)
ReDim aRetn(0 To nSize - 1) As Byte
WideCharToMultiByte CP_UTF8, 0, StrPtr(sData), -1, VarPtr(aRetn(0)), nSize, 0, 0

EncodeToBytes = aRetn
End Function

Private Function DecodeToBytes(ByVal sData As String) As Byte() ' Note: Len(sData) > 0
Dim aRetn() As Byte
Dim nSize As Long

nSize = MultiByteToWideChar(CP_UTF8, 0, StrPtr(sData), -1, 0, 0)
ReDim aRetn(0 To 2 * nSize - 1) As Byte
MultiByteToWideChar CP_UTF8, 0, StrPtr(sData), -1, VarPtr(aRetn(0)), nSize

DecodeToBytes = aRetn
End Function

Private Sub Command1_Click()
Dim s As String
s = StrConv(EncodeToBytes("aa中文aa"), vbUnicode)
MsgBox s
s = DecodeToBytes(StrConv(s, vbFromUnicode))
MsgBox s
End Sub


现在还是人类 2011-04-26
  • 打赏
  • 举报
回复
不过 http://blog.csdn.net/SupermanKing/archive/2010/11/05/5989227.aspx 的
UTF8ToUnicode 函数是很值得你参考的,是整个UTF-8解码过程,没有用API,如果把过程逆
向还可做出编码过程。
现在还是人类 2011-04-26
  • 打赏
  • 举报
回复
弄错了,上面是转回来的,这个才是
http://blog.csdn.net/SupermanKing/archive/2008/10/16/3082860.aspx
perfume_lily 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 supermanking 的回复:]
这里面有现成的函数
http://blog.csdn.net/SupermanKing/archive/2010/11/05/5989227.aspx
[/Quote]
没看懂
perfume_lily 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tiger_zhao 的回复:]
http://topic.csdn.net/u/20100306/20/03450634-dcd6-4982-947e-a225a262745f.html
[/Quote]
这个问题不是没解决吗 
现在还是人类 2011-04-26
  • 打赏
  • 举报
回复
Tiger_Zhao 2011-04-26
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100306/20/03450634-dcd6-4982-947e-a225a262745f.html
perfume_lily 2011-04-26
  • 打赏
  • 举报
回复
没人跟帖? 分要是不够在加

7,763

社区成员

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

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