La Web del Programador: Comunidad de Programadores
 
    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.