charset encoding
Par PlaceOweb le lundi, novembre 26 2012, 14:14 - JAVA - Lien permanent
UTF-8 ISO-8859-1 quelle galère !
Jeux de caractères
- Windows-1252 utilisé historiquement par défaut sur le système d'exploitation Microsoft Windows en anglais et dans les principales langues d’Europe de l’Ouest (dont le français).
- Page de code 850 est une page de code définie par IBM et qui est utilisée en Europe occidentale avec le système DOS. Elle est encore utilisée dans les fenêtres de type console ou invite de commandes sur les systèmes Microsoft Windows en Europe occidentale.
- ISO-8859-1
- ISO 8859-15 ajoute entre autres le caractère de l'euro (€) et les caractères Œ, œ et Ÿ qui manquaient pour l'écriture du français
- UTF-8
- Unicode
- ASCII
Les tables
- Affichage des caractères Unicode (ISO-10646)
- Unicode Character Search : é
- HTML Entity (decimal) é
- HTML Entity (hex) é
- HTML Entity (named) é
- How to type in Microsoft Windows Alt +00E9 Alt 0233 Alt 130
- UTF-8 (hex) 0xC3 0xA9 (c3a9)
- UTF-16 (hex) 0x00E9 (00e9)
- UTF-16 (decimal) 233
- UTF-32 (hex) 0x000000E9 (00e9)
- UTF-32 (decimal) 233
- C/C++/Java source code "\u00E9"
Encodage JAVA (au niveau des fichiers : Dfile.encoding)
java -cp %cp% com.placeoweb.Test java -Dfile.encoding=cp850 -cp %cp% com.placeoweb.Test java -Dfile.encoding=utf8 -cp %cp% com.placeoweb.Test
Attention toutefois car cela consiste à remplacer l'encodage par défaut. Si tu lis/écris des fichiers sans préciser l'encodage c'est le cp850 qui sera utilisé !
SAX
- SAX handling special characters
- Tip: Detect XML document encodings with SAX and XNI
- Detecting XML charset encoding, getting it right (or at least trying to)
- Lecture d'un fichier XML avec SAX
- Howto let the SAX parser determine the encoding from the xml declaration?
équivalent de la fonction php utf8_decode en java
String output = new String(input.getBytes("ISO-8859-1"),"UTF-8"); // je récupérais un fichier text par ftp encodé en utf8 et je devais le convertir en iso car sur la machine qui faisait la récupération via ftp l'encoding était iso.
L'array de Byte lu au format charset = "ISO-8859-1"
XMLReader analyseur = XMLReaderFactory.createXMLReader(); // ByteArrayInputStream bais = new ByteArrayInputStream(this.blocXML.getBytes()); // ByteArrayInputStream bais = new ByteArrayInputStream(new String(this.blocXML.getBytes(), Charset.forName("ISO-8859-1")).getBytes());()); // ByteArrayInputStream bais = new ByteArrayInputStream(this.blocXML.getBytes("ISO-8859-1")); // String wordnotencoded = this.blocXML; // String word = wordnotencoded.replace("é", "é").replace("à ", "à"); // ByteArrayInputStream bais = new ByteArrayInputStream(wordnotencoded.getBytes("ISO-8859-1")); ByteArrayInputStream bais = new ByteArrayInputStream(this.blocXML.getBytes("ISO-8859-1"));
Converting UTF-8 to ISO-8859-1 in Java - how to keep it as single byte
// evict non ISO-8859-1 characters, will be replace by '?' (before send to a ISO-8859-1 DB by example): utf8String = new String ( utf8String.getBytes(), "ISO-8859-1" );
java : encodage de caractère ISO-LATIN-1 vers Unicode
Convertir une chaine UTF8 en ISO-8859-1
String stringISO = new String ( stringUTF8.getBytes(), "ISO-8859-1" );
Convertir le cp1252 en iso-8859-1
byte[] caracteresCP1252 = null; // recuperer les valeurs ici String texteIndependantDuCharset = new String(caracteresCP1252,"windows-1252"); byte[] caracteresISO88591 = texteIndependantDuCharset.getBytes("ISO-8859-1");
How do I convert between ISO-8859-1 and UTF-8 in Java?
byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8"); // or byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1");
How do I convert a String from Unicode to another encoding and vice versa?
/* convert from UTF-8 encoded HTML-Pages -> internal Java String Format */ public static String convertFromUTF8(String s) { String out = null; try { out = new String(s.getBytes("ISO-8859-1"), "UTF-8"); } catch (java.io.UnsupportedEncodingException e) { return null; } return out; } /* convert from internal Java String Format -> UTF-8 encoded HTML/JSP-Pages */ public static String convertToUTF8(String s) { String out = null; try { out = new String(s.getBytes("UTF-8")); } catch (java.io.UnsupportedEncodingException e) { return null; } return out; }
é becomes &195;#169 and then becomes é How do I fix this encoding issue?
javac -encoding utf8 MyCode.java
Autre
- FAQ JAVA : Gestion des nombres et chaînes de caractères
- Java - Les types de données
- char : Caractère Unicode : Le type char (provenant de l'anglais character) permet de stocker la valeur Unicode, codée sur 16 bits, d'un caractère, c'est-à-dire un nombre entier codé sur 16 bits, soit 65535 caractères !
- String : Les chaînes de caractères ne correspondent pas à un type de données mais à une classe, ce qui signifie qu'une chaîne de caractère est un objet possédant des attributs et des méthodes.
XML Encoding
HTML URL Encoding Reference
E %45 e %65 È %C8 É %C9 è %E8 é %E9
Caractère de l'encodage CP1252 posant problème en ISO-8859-1
32 caractères de l'encodage CP-1252 (= Windows-1252) ne sont pas compatible avec l'ISO-8859-1. Ce sont les caractères codés de \x80 à \x9f (€ à Ÿ) : € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ ‘ ’ “ ” • – — ˜ ™ š › œ Ÿ .
Passer du latin1 à l'unicode - Caractères bizarres
- "�" => la chaine de caractères est encodée en ISO-8859-1. Il y a de fortes chances que le navigateur croit avoir affaire à de l'UTF-8 (probablement parce que votre page dit au navigateur qu'elle utilise l'UTF-8). Utilisez la fonction utf8_encode sur la chaine de caractères posant problème si elle est issue d'une variable PHP. Ce genre de caractère peut aussi s'afficher si le caractère qui devrait s'afficher ne fait pas parti de la table de caractères de cette norme (exemple : le ÿ majuscule). Pour cela, utilisez l'entité HTML correspondante (exemple : Ÿ ) ;
- "é", "î", "Ã" etc. => la chaine de caractères est encodée en UTF-8 mais le navigateur croit avoir affaire à de l'ISO-8859-1 (probablement parce que votre page dit au navigateur qu'elle utilise l'ISO-8859-1). Utilisez la fonction utf8_decode sur la chaine de caractères posant problème si elle est issue d'une variable PHP.
é ---> é ô ---> ô ë ---> ë è ---> è Ã> à ê> ê ’ ---> '
é=Ú et è=Þ
Ã?
$modif = array("é","Ã","ô","â","î","è","ê"); $amodif = array("é","à","ô","â","î","è","ê");