Pregunta: | 55257 - CONVERTIR UNICODE/ANSI/UNICODE |
Autor: | manuel sabogal |
Estoy desarrollando una aplicacion con sockets en visual basic 6 y requiero hacer una conversion de codigo para disminuir el peso de los paquetes enviados.
Solo requiero enviar Stream, pero para ello hago una conversion de codigo de ANSI a UTF8, pero a la hora de recivir los Stream en UTF8 no puedo convertirlos de nuevo a ANSI, solo logro tomar los caracteres en ASCII. El codigo q uso para enviar convertir los datos a UTF8 es: Public 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 Public Const CP_UTF8 = 65001 Public Function WideToUnicode(ByVal StrWide As String) As String Dim stBuffer() As Byte Dim cwch As Long Dim pwzBuffer As Long If Len(StrWide) = 0 Then Exit Function pwzBuffer = Len(StrWide) * 3 + 1 ReDim stBuffer(pwzBuffer - 1) cwch = WideCharToMultiByte(CP_UTF8, 0&, StrPtr(StrWide), Len(StrWide), stBuffer(0), pwzBuffer, vbNullString, ByVal 0&) If cwch Then cwch = cwch - 1 ReDim Preserve stBuffer(cwch) WideToUnicode = StrConv(stBuffer, vbUnicode) End If End Function Como puedo mejorar este codigo lograr una conversion de UTF8 a ANSI correcta??? |
Respuesta: | manuel sabogal |
Ya he trabajado en un nuevo codigo pero aun no logro conseguir la tan esperada conversion de codigo que requiero para mi programa.
El codigo q estoy usando para recivir y convertir los datos de UTF8 a ANSI es: Public 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 Public Const CP_ACP = 0 Public Function UnicodeToWide(ByVal StrUnicode As String) As String Dim stBuffer() As Byte Dim cwch As Long Dim pwzBuffer As Long If Len(StrUnicode) = 0 Then Exit Function pwzBuffer = Len(StrUnicode) / 3 + 1 ReDim stBuffer(pwzBuffer - 1) cwch = MultiByteToWideChar(CP_ACP, 0&, StrPtr(StrUnicode), Len(StrUnicode), stBuffer(0), pwzBuffer) If cwch Then cwch = cwch - 1 ReDim Preserve stBuffer(cwch) UnicodeToWide = StrConv(stBuffer, vbWide) End If End Function Tal vez con este codigo es mas facil armar el rompecabezas. Por favor ayudenme a desifrar este problema. |