在项目中遇到Winsock连接C#编写的socket服务端,取到的中文乱码。解决如下
- Option Explicit
- 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
读取到socket数据调用Utf8ToUnicode解决乱码。
- Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
- Dim dd As String
- Dim Data() As Byte
- Winsock1.GetData Data
- dd = Utf8ToUnicode(Data)
- End Sub
|