Red de conocimiento informático - Problemas con los teléfonos móviles - vb código chino confuso

vb código chino confuso

Debe descargar la página web de conversión de codificación para convertir UTF-8 a Unicode

El nuevo módulo se llama Module_UTF8:

Opción explícita

Público m_bIsNt As Boolean

Función de declaración pública 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

Función de declaración pública 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 Mientras) Mientras

Public Declare Sub CopyMemory Lib "kernel32" Alias ​​​​"RtlMoveMemory" (lpvDest como cualquiera, lpvSource como cualquier, ByVal cbCopy As Long)

Const pública CP_UTF8 = 65001

'Propósito: Convertir Utf8 a Unicode

Función pública UTF8_Decode(ByVal sUTF8 como cadena) Como cadena

Dim lngUtf8Size As Long

Dim strBuffer como cadena

Dim lngBufferSize como largo

Dim lngResult como

Dim bytUtf8() como byte

Dim n como Long

Si LenB(sUTF8) = 0, entonces salga de la función

Si m_bIsNt entonces

Si m_bIsNt entonces

En caso de error, vaya a EndFunction

bytUtf8 = StrConv(sUTF8, vbFromUnicode)

lngUtf8Size = UBound(bytUtf8) 1

Ir a 0 en caso de error

' es el Búfer de configuración de cadena de caracteres más largo posible, es decir, cada byte es

0.

Por ejemplo, cada byte es un byte ANSI, por lo que hay 1 Unicode (2 bytes) por carácter utf-8.

lngBufferSize = lngUtf8Size * 2

strBuffer = String$(lngBufferSize, vbNullChar)

'Usar página de códigos 65001 (UTF-8)

lngResult = MultiByteToWideChar(CP_UTF8, 0, bytUtf8(0), _

lngUtf8Size, StrPtr(strBuffer), lngBufferSize)

'Recorta el resultado a la longitud real

If lngResult Then

UTF8_Decode = Left$(strBuffer, lngResult)

End If

Else

Atenuar i As Long

Atenuar TopIndex mientras

Atenuar TwoBytes(1) como byte

Atenuar ThreeBytes(2) como byte

Atenuar AByte comoAtenuar AByte como byte< / p>

Dim TStr As String

Dim BArray() As Byte

'Continuar en caso de error, en caso de que alguien ingrese texto con acentos

' El texto debe estar codificado como UTF-8

Si ocurre un error, continúa con el siguiente paso

TopIndex = Len (sUTF8) 'El número de bytes es igual a TopIndex 1

Si TopIndex = 0, salga de la función 'Si no hay contenido para convertir, salga de la función

BArray = StrConv(sUTF8, vbFromUnicode)

i = 0 'Inicializar el puntero

TopIndex = TopIndex - 1

' Recorrer la matriz de bytes

Hacer mientras i lt = TopIndex

AByte = BArray(i)

Si AByte lt; amp H80 Entonces

' Caracteres ANSI normales - utilizar tal cual

TStr = TStr Chr$(AByte ).i = i 1 ' Incrementa el índice de matriz de bytes

ElseIf AByte gt; = amp HE0 Then 'was = amp HE1 Then

' Inicio de UTF-8 de 3 bytes; grupo de caracteres

'Copiar 3 bytes a ThreeBytes

ThreeBytes(0) = BArray(i): i = i 1

ThreeBytes(1) = BArray (i): i = i 1

ThreeBytes(2) = BArray(i): i = i 1

ThreeBytes(2) = BArray(i): i = i 1

' Comienzo de un grupo de caracteres UTF-8 de 3 bytes

' 1

' Convierte la matriz de bytes a UTF-16 y luego a Unicode

TStr =

TStr amp; ChrW$((ThreeBytes(0) Y amp; HF) * amp; H1000 (ThreeBytes(1) Y amp; H3F) * amp; H40 (ThreeBytes(2) Y amp; H3F))

ElseIf (AByte gt; = amp; HC2) And (AByte lt; = amp; HDB) Then

' Inicio del grupo de caracteres UTF-8 de 2 bytes

TwoBytes (0) = BArray(i): i = i 1

TwoBytes(1) = BArray(i): i = i 1

' Convertir matriz de bytes a UTF-16 Luego convertido a Unicode

TStr = TStr amp ChrW$((TwoBytes(0) Y amp; H1F) * amp; H40 (TwoBytes(1) Y amp; H3F))

Else

' Caracteres ANSI normales: utilizar tal cual

TStr = TStr amp Chr$(AByte): i = i 1 ' Incrementar el índice de matriz de bytes

End If

Bucle

UTF8_Decode = TStr ' Devuelve la cadena de resultado

Borrar BArray

End If

EndFunction:

Función final

'Propósito: Convertir una cadena Unicode a UTF-8. '

Función pública UTF8_Encode(ByVal strUnicode como cadena, ByVal bHTML opcional como booleano = True) Como cadena

Dim i As Long

Dim TLen As Long

Dim lPtr As Long

Dim UTF16 As Long

Dim UTF8_EncodeLong As String

TLen = Len(strUnicode)

Si TLen = 0, entonces salga de la función

Si m_bIsNt entonces

Atenuar lngBufferSize mientras

Atenuar lngResult mientras

Atenuar bytUtf8 () As Byte

'Establece un búfer para la cadena más larga posible.

lngBufferSize = TLen * 3 1

ReDim bytUtf8(lngBufferSize - 1)

'Utilice la página de códigos 65001 (UTF-8) para la traducción.

lngResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(strUnicode), _

TLen, bytUtf8(0), lngBufferSize, vbNullString, 0)

' El El resultado se recorta a la longitud real.

Si lngResult Entonces

lngResult = lngResult - 1

ReDim Preserve bytUtf8(lngResult)

' CopyMemory StrPtr(UTF8_Encode), bytUtf8 (0amp;), lngResult

UTF8_Encode = StrConv(bytUtf8, vbUnicode)

' Para i = 0 To lngResult

' p> ' UTF8_Encode = UTF8_Encode amp ;Chr$(bytUtf8(i))

' Siguiente paso

Finalizar si

Si no

For i = 1 To TLen

' Obtiene el valor UTF-16 de caracteres Unicode

lPtr = StrPtr(strUnicode) ((i - 1) * 2)

CopyMemory UTF16, ByVal lPtr , 2

'Convertir a UTF-8

Si UTF16 lt.amp;H80 Entonces ' 1 byte UTF-8

UTF8_EncodeLong = Chr$(UTF16 )

ElseIf UTF16 lt; amp; H800 Then ' 2 UTF-8 bytes

UTF8_EncodeLong = Chr $(amp; H80 (UTF16 And amp; H3F)) ' Mínimo válido 6 bits

UTF16 = UTF16 \ H40 'Desplazar a la derecha 6 bits

UTF8_EncodeLong = Chr$(amp.HC0 (UTF16 y H1F)) UTF8_EncodeLong 'Usar los 5 bits restantes

De lo contrario ' 3 UTF-8 bytes

UTF8_EncodeLong = Chr$(amp;H80 (UTF16 And amp;H3F)) 'Mínimo válido 6 bits

p>

UTF16 = UTF16 \ H40 ' Desplazamiento a la derecha 6 bits

UTF8_EncodeLong = Chr$(H80 (UTF16 y H3F)) UTF8_EncodeLong = Chr$(H80 (UTF16 y amp; H3F)) amp UTF8_EncodeLong 'Usar los siguientes 6 bits

UTF16 = UTF16 \ amp;H40 'Desplazamiento a la derecha 6 bits

UTF8_EncodeLong = Chr$(amp; HE0 (UTF16 Y amp; HF )) amp UTF8_EncodeLong 'Usa los 4 bits restantes

Finalizar si

UTF8_Encode = UTF8_Encode amp UTF8_EncodeLong

Siguiente

p>

Finalizar si

'Sustituir vbCode =

UTF8_Encode & UTF8_EncodeLong

Siguiente

Fin si

'Sustituya vbCrLf con saltos de línea HTML si se solicita.

Si bHTML Entonces

UTF8_Encode = Reemplazar$(UTF8_Encode, vbCrLf, "lt;br/gt;")

Finalizar si

Finalizar función