分享

VB6 Winsock解析中文乱码问题解决办法

 局部地区有小雨 2014-12-27
     在项目中遇到Winsock连接C#编写的socket服务端,取到的中文乱码。解决如下
Vb6代码  收藏代码
  1. Option Explicit  
  2. 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  
  3. 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  
  4. Private Const CP_UTF8 = 65001  


Vb6代码  收藏代码
  1. Function Utf8ToUnicode(ByRef Utf() As Byte) As String  
  2.     Dim lRet As Long  
  3.     Dim lLength As Long  
  4.     Dim lBufferSize As Long  
  5.     lLength = UBound(Utf) - LBound(Utf) + 1  
  6.     If lLength <= 0 Then Exit Function  
  7.     lBufferSize = lLength * 2  
  8.     Utf8ToUnicode = String$(lBufferSize, Chr(0))  
  9.     lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(Utf(0)), lLength, StrPtr(Utf8ToUnicode), lBufferSize)  
  10.     If lRet <> 0 Then  
  11.     Utf8ToUnicode = Left(Utf8ToUnicode, lRet)  
  12.     End If  
  13. End Function  


读取到socket数据调用Utf8ToUnicode解决乱码。
Vb6代码  收藏代码
  1. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)  
  2.     Dim dd As String  
  3.     Dim Data() As Byte  
  4.     Winsock1.GetData Data  
  5.     dd = Utf8ToUnicode(Data)  
  6. End Sub  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多