IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Problème encodage caractere unicode


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Profil pro
    crut
    Inscrit en
    mars 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : crut
    Secteur : Bâtiment

    Informations forums :
    Inscription : mars 2003
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Problème encodage caractere unicode
    Bonjour,

    Je l'en remet a vous car je n'ai plus d'idée pour traiter mon problème que voici.
    Dans mon code je recupere un inputstream via une socket puis je copie le contenu dans un tableau et je transmets le flux a "out"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ByteArrayOutputStream baism = new ByteArrayOutputStream(contentLength);
    byte[] buf = new byte[4096];
    int bytesIn = 0;
     
    while (((byteCount < contentLength) || (waitForDisconnect)) && ((bytesIn = in.read(buf)) >= 0)) {
    	out.write(buf, 0, bytesIn);
    	baism.write(buf, 0, bytesIn);
    	byteCount += bytesIn;
    }
    String metad = baism.toString();
    Quand j'affiche dans ma console netbean la string je vois "Gilbert Montagn\u00e9".
    Je me dis que ca vient de ma console.. je verifie et je tape dans un main a part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Gilbert Montagn\u00e9");
    et la je vois apparaitre avec surpise "Gilbert Montagné" avec l'accent !

    J'ai tout essayé des metad.getBytes("UTF-8"); des urldecode urlencode avec UTF8 spécifé ou pas et RIEN ne marche !! dans ma console je vois toujours appraitre les carateres unicode !


    Merci de votre aide.
    J

  2. #2
    Membre à l'essai
    Profil pro
    crut
    Inscrit en
    mars 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : crut
    Secteur : Bâtiment

    Informations forums :
    Inscription : mars 2003
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Je précise mon problème après plusieurs heures de recherche.
    Je recois dans la socket de la data JSON que j'aimerais lire au format UTF-8 c'est a dire avec les accents comme le "é" codé avec \u00e9 etc...
    je n'arrive pas a en faire une string que je puisse lire correctement avec les accents décodés dans mon System.out.println

    J'ai toujours des \u00e9. je suis prêt à écouter et essayer toute sorte de solutions, c'est rageant dans un projet de dépenser autant de temps sur des choses comme celle-ci.

    Merci!
    Si vous avez un decoder UTF-8 je suis preneur !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    As tu essayé en passant par les filtres InputStreamReader et OutputStreamWriter ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Charset charsetIn=Charset.defaultCharset(); // Codifiaction choisie en input: "UTF-8",...
    Charset charsetOut=Charset.defaultCharset(); // Codifiaction choisie en output: "UTF-8",...
     
    InputStreamReader inputStreamReader=new InputStreamReader(in,charsetIn);
    OutputStreamWriter outputStreamWriter=new OutputStreamWriter(out,charsetOut);
    Voici la correspondance avec ton code (en commentaire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.nio.CharBuffer;
    import java.nio.charset.Charset;
     
     
    public class Test {
    	public static void main(String args[]) {
    		Test test=new Test();
     
    		try {
    			// INPUT STREAM
    			String s="Gilbert Montagné";
    			InputStream in=new ByteArrayInputStream(s.getBytes());
     
    			// OUPUT STREAM
    			OutputStream out=System.out;
     
    			// try it 
    			String res = test.tryOut(s.length(), false, in, out);
     
    			// Result 
    			System.out.println();
    			System.out.println("res="+res);
     
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	public String tryOut(int contentLength,boolean waitForDisconnect,InputStream in,OutputStream out) throws IOException {
     
    		// Input filter
    		Charset charsetIn=Charset.defaultCharset(); // Codifiaction choisie en input: "UTF-8",...
    		InputStreamReader inputStreamReader=new InputStreamReader(in,charsetIn);
     
    		// Output filter
    		Charset charsetOut=Charset.defaultCharset(); // Codifiaction choisie en output: "UTF-8",...
    		OutputStreamWriter outputStreamWriter=new OutputStreamWriter(out,charsetOut);
     
    		//ByteArrayOutputStream baism = new ByteArrayOutputStream(contentLength);
    		//byte[] buf = new byte[4096];
    		CharBuffer buf= CharBuffer.allocate(contentLength);
     
    		//int byteCount=0;
    		//int bytesIn = 0;
    		int charCount=0;
    		int charIn = 0;
     
    		//while (((byteCount < contentLength) || (waitForDisconnect)) && ((bytesIn = in.read(buf)) >= 0)) { 
    		while (((charCount < contentLength) || (waitForDisconnect)) && ((charIn = inputStreamReader.read(buf.array(),charCount,contentLength)) >= 0)) {
    			//out.write(buf, 0, bytesIn);
    			//baism.write(buf, 0, bytesIn);
    			outputStreamWriter.write(buf.array(), charCount, charIn);
     
    			//byteCount += bytesIn;
    			charCount += charIn;
    		}
    		outputStreamWriter.flush(); // Terminer l'écriture 
     
    		//String metad = baism.toString();
    		String metad = buf.toString().substring(0,charCount);
    		return metad;
    	}
     
    }

Discussions similaires

  1. problème d'encodage caracteres bizarre
    Par maysa dans le forum Requêtes
    Réponses: 0
    Dernier message: 29/10/2008, 10h06
  2. Problème d'encodage en Unicode
    Par Skreo dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/12/2005, 10h43
  3. Réponses: 4
    Dernier message: 13/04/2005, 18h12
  4. Pb caractere unicode avec forms9i..
    Par ffffffffx0 dans le forum Oracle
    Réponses: 8
    Dernier message: 28/04/2004, 13h24
  5. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo