2012-08-24 22 views
6

Tengo un proyecto de Blackberry en el que estoy trabajando y necesito convertir matrices de bytes de cadenas codificadas usando UTF-16LE (little endian) a una matriz de bytes de cadena en el Codificación UTF-16BE (big endian) y vis. versa. Un servidor al que me estoy conectando envía las matrices de cadenas de bytes del dispositivo BlackBerry en la codificación UTF-16LE; sin embargo, el dispositivo no es compatible nativamente con UTF-16LE. Cuando intento decodificar las matrices de bytes en cadenas, las cadenas son ilegibles. El dispositivo, sin embargo, es compatible con UTF-16BE. También necesito revertir este proceso, es decir, convertir una matriz de bytes de una cadena con codificación UTF-16BE en lo que el servidor espera (UTF-16LE). Gracias.UTF-16BE a UTF-16LE, y

I no puede hacer esto en el dispositivo:

String test = "test"; 
byte[] testBytes = test.getBytes("UTF-16LE");// throws UnsupportedEncodingException 

I puede hacer esto:

String test = "test"; 
byte[] testBytes = test.getBytes("UTF-16BE");//works 
+0

¿Qué obtienes si solo usas 'byte [] testBytes = test.getBytes (" UTF-16 ")'? ¿Su servidor pone el carácter BOM correcto al comienzo de la cadena y Blackberry detecta automáticamente a Big Endian? – HeatfanJohn

+0

@HeatfanJohn test.getBytes ("UTF-16") arroja una excepción también. No estoy seguro de si el servidor pone la lista de materiales al comienzo de la cadena. Es un servidor ASP.Net ADFS (si eso ayuda). BlackBerry no detecta automáticamente. Gracias. – RyanM

Respuesta

11

UTF-16 utiliza dos bytes por codeunit, con algunos puntos de código Unicode codificados usando una unidad de código y otros puntos de código que usan dos unidades de código (llamado par suplente).

Para convertir entre UTF-16LE y UTF-16BE, simplemente recorra los bytes intercambiando el orden de cada par de 2 bytes de cada codeunidad. El orden de las unidades de código sustitutas no cambia entre LE y BE. IOW, simplemente intercambie los bytes 0 y 1 entre sí, intercambie los bytes 2 y 3 entre sí, y así sucesivamente.

+0

Ya veo. Lo intentaré e informaré. ¡Gracias! – RyanM

+0

¡Funcionó! Muchas gracias. – RyanM