2009-07-08 12 views
5

Voglio leggere le stringhe UTF-8 da un server di cui ho il controllo, utilizzando Java MIDP. Il mio server sta inviando dati UTF-8. Il seguente codice si avvicina:Lettura di stringhe UTF8 da un server tramite http utilizzando 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"); 

ho stampare il carattere e il suo codice per il debug. Penso che stia leggendo i caratteri ASCII qui, quindi, quando ho un carattere che ha il suo codice sopra 127, ottengo due caratteri, come i due esempi seguenti:

lettera á. Codice UTF E1 (esadecimale). Ottengo 195 e poi 161

lettera ô. Codice UTF F4 (hex). Ottengo 195 e poi 180

La mia domanda è, c'è un modo per me di leggere direttamente i caratteri UTF. Ho trovato alcune soluzioni nel web ma nessuna si adatta al MIDP.

risposta

10

Invece di leggere byte, leggere caratteri. Utilizzare un InputStreamReader API per convertire i byte in caratteri ed eseguire il codificatore UTF-8. Dovrebbe essere supportato come parte del profilo JavaME CLDC (JSR 30); è qui che il link punta.

provare qualcosa di simile:

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

semplicemente perfetto. Grazie! –

+0

Grazie per l'ottima risposta che ha aiutato molto. Un piccolo commento, su questa riga: 'Reader r = InputStreamReader (c.openInputStream()," UTF-8 ");', Funziona solo per me se lo uso in questo modo: 'Reader r = new InputStreamReader (c .openInputStream(), "UTF-8"); 'Grazie ancora !!!! –

Problemi correlati