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

Format d'échange (XML, JSON...) Java Discussion :

Conversion ISO8859-15 en UTF8


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 56
    Par défaut Conversion ISO8859-15 en UTF8
    Bonjour,

    J'extrait via une connexion JDBC un champ CLOB dans l'encoding ISO8859-15 pour convertir et générer un fichier XML dans l'encoding UTF8 à partir d'un traitement JAVA.

    Le problème est le suivant : les majuscules accentuées ne sont pas correctement convertis : des carrés à la place.

    Tous les autres accents sortent bien.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ce n'est pas un problème d'encodage mais un problème de fonte si t'as des carrés à l'affiche. Vérifie les octes dans le fichier en question et je suis certain qu'ils doivent être corrects.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par edwin301 Voir le message
    Le problème est le suivant : les majuscules accentuées ne sont pas correctement convertis : des carrés à la place.

    Tous les autres accents sortent bien.
    Dans ce cas, c'est dans la BDD que les majuscules accentuées sont incorrectes. Elles ont été mal enregistrées, il n'y a plus rien à y faire.

    Ou alors, tu fais un traitement bizarre et inutile entre BDD et XML.

    Edit : Ah, ce que dit tchize est fort possible, en effet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    La réponse de thelvin est aussi probable. Un CLOB ce n'est pas un BLOB, c'est soumis aux règles d'encodage de la DB. D'ailleurs, avec un CLOB, normalement, tu n'a pas à connaitre "l'encodage", tu récupère un Reader directement via Clob.getCharacterStream()

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 56
    Par défaut
    Il ne s'agit pas seulement de l'affichage mais dans le fichier, j'ai bien des carrés pour le caractère 'É', alors que en BDD j'ai 'Ã?'.

    La bdd est en character set iso 8859 et le fichier de sortie en UTF8.
    La conversion iso8859-15 en utf8 ne fonctionne pas et ceci uniquement pour les majuscules accentuées.

    Pour un CLOB tu n'as pas à connaitre l'encodage oui, mais quand tu veux un format de sortie différent (impératif), il faut savoir l'encoding d'entrée et de sortie :
    new String(maChaine.getBytes("ISO8859-15"), "UTF8").
    Sans faire cela, tous les accents (majuscule et miniscule) sortent avec des caractères étranges.

    Un conseil sans bidouiller ?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par edwin301 Voir le message
    new String(maChaine.getBytes("ISO8859-15"), "UTF8").
    Si tu fait cela c'est normal que tu n'obtiennes rien de bien !!!
    Tu converties une chaine en byte encodé en ISO8859-15, que tu re-transformes en chaine en décodant de l'UTF-8.



    Une chaine n'est pas associé à un encodage : en mémoire les chars sont encodés en UTF-16 !

    Tu ne dois spécifier l'encodage que lorsque tu lis ou écris un flux binaire.



    Bref supprimes cette ligne de code et ca devrait marcher bien mieux... s'il n'y a pas d'autres atrocité de ce genre.



    a++

  7. #7
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    Citation Envoyé par edwin301 Voir le message
    new String(maChaine.getBytes("ISO8859-15"), "UTF8").
    si ne me m'abuse c'est sa le problème, la se que tu fait c'est décoder de l'iso comme si c'était de UTF8.
    la ou tu doit spécifier UTF8 c'est au moment d'écrire ton fichier de sortie.

    EDIT: grilé en mieu en plus xD

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    CA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(maChaine.getBytes("ISO8859-15"), "UTF8").
    Ca ne fait CERTAINEMENT pas une conversion, ça fait une soupe!

    Tu prend ta chaine, tu la "sauve" (byte[]) en ISO8859-15 et puis tu lui dit de la relire en disant "ha mais tout compte fait, non j'ai stocké de l'UTF-8", ca n'a pas de sens.

    Pour sauver en UTF-8, on crée un Writer avec de l'utf-8, et tu fais un write(laString) avec ça. Et tu n'a pas besoin de l'encodage d'origine:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Reader r = clob.getReader();
    OutputStream outputStreamFichier = new FileOutputStream(....);
    Writer w = new OutputStreamWriter(outputStreamFichier,"UTF-8"));
    char[] buffer = new char[2048];
    int read = 0;
    while ( (read=r.read(buffer)) > 0)
       w.write(buffer,0,read);
    + nettoyage / flush / fermeture etc

  9. #9
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 56
    Par défaut
    Je vois qu'y a de la bonne volonté.
    Cependant si j'ai ajouté cette conversion c'est parceque le simple fait d'utiliser un writer avec l'encoding UTF-8
    Writer w = new OutputStreamWriter(outputStreamFichier,"UTF-8"))

    ne suffit pas pour traiter correctement les accents en minuscule.

Discussions similaires

  1. fonction de conversion de caracteres en utf8
    Par renkev dans le forum Langage
    Réponses: 12
    Dernier message: 14/04/2011, 12h13
  2. absence de conversion de locale vers utf8 dans un code
    Par minibus dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 12/08/2009, 11h32
  3. conversion UTF8 vers ASCII en C
    Par znarf dans le forum C
    Réponses: 2
    Dernier message: 05/07/2006, 13h55
  4. prob de Conversion carac spéciaux en UTF8: PERL 5.6.1
    Par kaizersozer dans le forum Modules
    Réponses: 2
    Dernier message: 24/02/2006, 19h02
  5. [i18n][utf8] Outils pour convertir iso8859-1 en unicode/utf8
    Par co2 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 07/11/2005, 09h56

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