2009-07-08 7 views
5

Quiero leer cadenas UTF-8 de un servidor del que tengo control, usando Java MIDP. Mi servidor está enviando datos UTF-8. El siguiente código se acerca:Lectura de cadenas UTF8 desde un servidor a través de http utilizando MIDP

 c = (StreamConnection) Connector.open(
      myServer, Connector.READ_WRITE); 
     InputStream is = c.openInputStream(); 
     StringBuffer sb = new StringBuffer(); 
     int ch; 
     while((ch = is.read()) != -1) 
      sb.append((char)ch + "->" + ch + "\n"); 

puedo imprimir el carbón y su código para fines de depuración. Creo que está leyendo caracteres ASCII aquí, entonces, cuando tengo un char que tiene su código por encima de 127, obtengo dos caracteres, como los dos ejemplos siguientes:

letra á. Código UTF E1 (hex). Obtengo 195 y luego 161

letra ô. Código UTF F4 (hex). Obtengo 195 y luego 180

Mi pregunta es, ¿hay alguna manera de leer los caracteres UTF directamente? He encontrado algunas soluciones en la web pero ninguna se ajusta al MIDP.

Respuesta

10

En lugar de leer bytes, lea los caracteres. Use un InputStreamReader API para convertir bytes a caracteres y ejecutar el codificador UTF-8. Debe ser compatible como parte del perfil JavaME CLDC (JSR 30); ahí es donde apunta el enlace.

intentar algo como esto:

c = (StreamConnection) Connector.open(
     myServer, Connector.READ_WRITE); 
Reader r = new InputStreamReader(c.openInputStream(), "UTF-8"); 
StringBuffer sb = new StringBuffer(); 
int ch; 
while((ch = r.read()) != -1) 
    sb.append((char)ch + "->" + ch + "\n"); 
+0

Simplemente perfecto. ¡Gracias! –

+0

Gracias por la gran respuesta me ayudó mucho. Un pequeño comentario, en esta fila: 'Reader r = InputStreamReader (c.openInputStream()," UTF-8 ");', solo funciona para mí si lo uso de esta manera: 'Reader r = new InputStreamReader (c .openInputStream(), "UTF-8"); 'De nuevo gracias !!!! –

Cuestiones relacionadas