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

Langage Java Discussion :

Convertir le cp1252 en iso-8859-1


Sujet :

Langage Java

  1. #1
    Invité
    Invité(e)
    Par défaut Convertir le cp1252 en iso-8859-1
    Bonjour,

    En PHP, j'utilise une méthode pour convertir les caractères cp1252 des saisies utilisateurs en iso-8859-1.

    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
    function purge_iso88591($str)
    {
    	$cp1252_map = array(
    	   "\x80" => "€", /* EURO SIGN */
    	   "\x82" => "‚", /* SINGLE LOW-9 QUOTATION MARK */
    	   "\x83" => "ƒ",     /* LATIN SMALL LETTER F WITH HOOK */
    	   "\x84" => "„", /* DOUBLE LOW-9 QUOTATION MARK */
    	   "\x85" => "…", /* HORIZONTAL ELLIPSIS */
    	   "\x86" => "†", /* DAGGER */
    	   "\x87" => "‡", /* DOUBLE DAGGER */
    	   "\x88" => "ˆ",     /* MODIFIER LETTER CIRCUMFLEX ACCENT */
    	   "\x89" => "‰", /* PER MILLE SIGN */
    	   "\x8a" => "Š",   /* LATIN CAPITAL LETTER S WITH CARON */
    	   "\x8b" => "‹", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
    	   "\x8c" => "Œ",   /* LATIN CAPITAL LIGATURE OE */
    	   "\x8e" => "Ž",   /* LATIN CAPITAL LETTER Z WITH CARON */
    	   "\x91" => "‘", /* LEFT SINGLE QUOTATION MARK */
    	   "\x92" => "’", /* RIGHT SINGLE QUOTATION MARK */
    	   "\x93" => "“", /* LEFT DOUBLE QUOTATION MARK */
    	   "\x94" => "”", /* RIGHT DOUBLE QUOTATION MARK */
    	   "\x95" => "•", /* BULLET */
    	   "\x96" => "–", /* EN DASH */
    	   "\x97" => "—", /* EM DASH */
     
    	   "\x98" => "˜",   /* SMALL TILDE */
    	   "\x99" => "™", /* TRADE MARK SIGN */
    	   "\x9a" => "š",   /* LATIN SMALL LETTER S WITH CARON */
    	   "\x9b" => "›", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
    	   "\x9c" => "œ",   /* LATIN SMALL LIGATURE OE */
    	   "\x9e" => "ž",   /* LATIN SMALL LETTER Z WITH CARON */
    	   "\x9f" => "Ÿ"    /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
    	);
     
    	return strtr($str, $cp1252_map);
    }
    Je n'arrive pas à faire la même fonction en Java, car je ne sais pas comment écrire les caractères du type "\x80" (séquence d'échappement non valide).

    Avez-vous une idée de comment procéder ? Merci.

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    En java pour les hexas dans les chaînes il faut utiliser u. En effet, les caractères en java sont tous en unicode.

    Cela donne par exemple : "\u0080" => "€", /* EURO SIGN */.

    Si tu as des bytes alors le x fonctionne : byte esc = 0x1b;.

    Sinon, par des éléments de la classe String, ou par java.io, ou par java.nio.charset, tu pourrais faire faire ces conversions par la mécanique java.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Si tu as plus d'infos sur les méthodes disponibles nativement pour faire ça, je suis intéressé car je n'ai pas trouvé comment faire. Merci beaucoup en tout cas.

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Un exemple indicatif rapide avec nio :
    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
     
    in = new File(nomfichier);
    inlength = in.length();
    inf = new FileInputStream(in);
    ouf = new FileOutputStream(tmp);
    inc = inf.getChannel();
    ouc = ouf.getChannel();
    inmap = inc.map(FileChannel.MapMode.READ_ONLY, 0, inlength);
    codein = Charset.forName(encodageEntree).newDecoder();
    cbin = codein.decode(inmap);
    codeout = Charset.forName(encodageSortie).newEncoder();
    cout = codeout.encode(cbin);
    ouc.write(cout);
    inc.close();
    ouc.close();
    ... il te transforme n'importe quel fichier texte d'encoding encodageEntree en n'importe quel fichier texte d'encoding encodageSortie.

  5. #5
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    byte[] caracteresCP1252 = null; // recuperer les valeurs ici
    String texteIndependantDuCharset = new String(caracteresCP1252,"windows-1252");
    byte[] caracteresISO88591 = texteIndependantDuCharset.getBytes("ISO-8859-1");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir encoding de type "ISO-8859-1"
    Par zied87 dans le forum Windows Phone
    Réponses: 12
    Dernier message: 12/08/2011, 11h13
  2. Convertir de ISO-8859-1 en UTF-8
    Par nico2006 dans le forum C++
    Réponses: 5
    Dernier message: 19/03/2009, 01h18
  3. Convertir une chaîne utf8 en iso-8859-1
    Par dredre dans le forum ASP
    Réponses: 1
    Dernier message: 05/05/2006, 00h48
  4. Convertir une chaine UTF8 en ISO-8859-1
    Par eods dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/08/2004, 16h57

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