当前位置:编程学习 > VB >>

vb 字符串由ansi转 utf8代码

如题 --------------------编程问答-------------------- 没人跟帖? 分要是不够在加 --------------------编程问答-------------------- http://topic.csdn.net/u/20100306/20/03450634-dcd6-4982-947e-a225a262745f.html --------------------编程问答-------------------- http://topic.csdn.net/u/20100306/20/03450634-dcd6-4982-947e-a225a262745f.html --------------------编程问答-------------------- 这里面有现成的函数
http://blog.csdn.net/SupermanKing/archive/2010/11/05/5989227.aspx --------------------编程问答--------------------
引用 2 楼 tiger_zhao 的回复:
http://topic.csdn.net/u/20100306/20/03450634-dcd6-4982-947e-a225a262745f.html

这个问题不是没解决吗  --------------------编程问答--------------------
引用 4 楼 supermanking 的回复:
这里面有现成的函数
http://blog.csdn.net/SupermanKing/archive/2010/11/05/5989227.aspx

没看懂 --------------------编程问答-------------------- 弄错了,上面是转回来的,这个才是
http://blog.csdn.net/SupermanKing/archive/2008/10/16/3082860.aspx --------------------编程问答-------------------- 不过 http://blog.csdn.net/SupermanKing/archive/2010/11/05/5989227.aspx 的
UTF8ToUnicode 函数是很值得你参考的,是整个UTF-8解码过程,没有用API,如果把过程逆
向还可做出编码过程。
--------------------编程问答-------------------- http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html --------------------编程问答-------------------- 来个狠点地
http://www.baidu.com/s?tn=iewz_dg&ch=2&bs=ansi+%D7%AA+utf8+dim&f=8&wd=ansi+%D7%AA+utf8+dim --------------------编程问答--------------------
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


--------------------编程问答--------------------
引用 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

我要是能百度到 还来这问吗 --------------------编程问答-------------------- 这不帮你找了么
上面的代码试过了?

引用 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

我要是能百度到 还来这问吗
--------------------编程问答--------------------
引用 12 楼 perfume_lily 的回复:
我要是能百度到 还来这问吗

你的问题在网上早就有资料了,百度一定能找到,只是用不用心,想不想找的个人问题。
像这种问题,即使CSDN也回答过不知多少贴,你都不去搜索一下就问了,别人给你连接
也是当然的。 --------------------编程问答--------------------
引用 5 楼 perfume_lily 的回复:
这个问题不是没解决吗

楼主太监了不等于方法没用。 --------------------编程问答-------------------- 融汇贯通才是最重要的 --------------------编程问答--------------------
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,