2009-07-08 7 views
5

Je souhaite lire les chaînes UTF-8 à partir d'un serveur dont j'ai le contrôle, en utilisant java MIDP. Mon serveur envoie des données UTF-8. Le code suivant se rapproche:Lecture de chaînes UTF8 à partir d'un serveur via http à l'aide de 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"); 

j'imprimer le omble chevalier et son code à des fins de débogage. Je pense qu'il lit des caractères ASCII ici, donc, quand j'ai un caractère qui a son code au-dessus de 127, alors je reçois deux caractères, comme les deux exemples suivants:

lettre á. Code UTF E1 (hex). Je reçois 195 puis 161

lettre ô. Code UTF F4 (hex). Je reçois 195 puis 180

Ma question est, est-il un moyen pour moi de lire les caractères UTF directement. J'ai trouvé quelques solutions sur le web mais aucune ne correspond au MIDP.

Répondre

10

Au lieu de lire des octets, lisez les caractères. Utilisez un InputStreamReader API pour convertir les octets en caractères et parcourir l'encodeur UTF-8. Il devrait être pris en charge dans le cadre du profil JavaME CLDC (JSR 30); c'est là que les liens pointent.

Essayez quelque chose comme ceci:

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

parfait. Merci! –

+0

Merci pour la bonne réponse, ça m'a beaucoup aidé. Un petit commentaire, sur cette ligne: 'Lecteur r = InputStreamReader (c.openInputStream()," UTF-8 ");', Cela ne marche que si je l'utilise de cette façon: 'Reader r = new InputStreamReader (c .openInputStream(), "UTF-8"); 'Encore merci !!!! –

Questions connexes