Imprimir página | Cerrar ventana

texto a UTF-16/ unicode

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84493
Fecha de impresión: 20/Julio/2019 a las 04:53


Tema: texto a UTF-16/ unicode
Publicado por: walter1972
Asunto: texto a UTF-16/ unicode
Fecha de publicación: 13/Mayo/2019 a las 22:49
hola buen día,  tengo un cuadro de texto normal y quiero convertirlo a hexadecimal 
tengo la funcion HEX que funciona ok si pongo solo texto por ejemplo 

Hola = 68006F006C0061 /// esto va ok 

ahora el problema es si pongo un emojis por ejemplo Smile me devuelve = 003D00D8000A  cuando en realidad tendría que devolver : D83DDE0A  

los emojis los pongo con el teclado de windows 10 /  tecla "Windows + ."  la cual tiene emojis

la función que copie de Internet y uso para enviar mensajes SMS x PDU   :



Dim MiCadenaDeBytes() As Byte
MiCadenaDeBytes = Text29 ' aca el texto comun 
For i = LBound(MiCadenaDeBytes) To (UBound(MiCadenaDeBytes) - 1)

If Not hex(MiCadenaDeBytes(i)) = 0 Then
If hex(MiCadenaDeBytes(i)) = "AC" Then
mensaje = mensaje & "20" & Left(hex(MiCadenaDeBytes(i)), 4)
Else
If hex(MiCadenaDeBytes(i)) = "D" Then
mensaje = mensaje & "000" & Left(hex(MiCadenaDeBytes(i)), 4) '
Else
If hex(MiCadenaDeBytes(i)) = "A" Then
mensaje = mensaje & "000" & Left(hex(MiCadenaDeBytes(i)), 4)
Else
mensaje = mensaje & "00" & Left(hex(MiCadenaDeBytes(i)), 4) 
End If
End If
End If
End If
Next

texto30=mensaje ' aca tendria que devolver D83DDE0A la caritaSmile 



Respuestas:
Publicado por: pitxiku
Fecha de publicación: 16/Mayo/2019 a las 18:54
Una posibilidad es usar JavaScript, que tiene más posibilidades de trabajo con texto Unicode (u otro tipo de lenguaje de programación), y usarlo desde Access.

Un pequeño ejemplo:

- https://1drv.ms/u/s!AsYMk9OS3HACiEW5MsT-72QhjAFO

En el formulario hay incrustado un control ScriptControl para poder usar la función JavaScript que se agrega por código, y a partir de ahí se le llama con el texto a codificar y se recupera el resultado.


Publicado por: walter1972
Fecha de publicación: 17/Mayo/2019 a las 14:27
hola de nuevo el ejemplo funciona Ok con los emojis Smile solos , ahora el problema es con el texto lo devuelve pero no lo pone con los 00 adelante intente cambiar el codigo con ejemplos de google y me pone 00 al  D83DDE0A

texto ahora queda 686f6c61 tendria que quedar 0068006F006C0061 porque sino llegan caracteres chinos

si modifico el codigo de java "del cual no tengo idea" modifica tambien  el D83DDE0A y pone 0083003d00de000a Angry con lo cual no llega nada solo ??



Publicado por: pitxiku
Fecha de publicación: 18/Mayo/2019 a las 17:15
Puedes controlar la longitud del código hexadecimal, y agregar ceros en consecuencia. El ejemplo actualizado:

- https://1drv.ms/u/s!AsYMk9OS3HACiEW5MsT-72QhjAFO

Otra posibilidad, dependiendo de dónde estás usando el Unicode, es colocar el identificador "U+" delante de cada código, para que el programa sepa que es un código Unicode.

Y otra posibilidad, más "pesada" al principio, es crear una tabla con 2 campos, uno para el carácter y otro para el código Unicode, y luego se tratará sólo de hacer una búsqueda:

- https://unicode-table.com/es/


Publicado por: walter1972
Fecha de publicación: 20/Mayo/2019 a las 13:32
muchas gracias funciono ok con la primera solucion  / no sabia que javascrip se podia ejecutar desde ms access estuve buscando la solucion en VBA y nada . de nuevo muchas graciasSmile



Imprimir página | Cerrar ventana