OVH Cloud OVH Cloud

Unicode ?

1 réponse
Avatar
Philippe
Salut à tous,

Je voudrais lire et écrire des caractères dans un fichiers en récupérant le
code binaire.
Si les caractères sont code en ASCII, no problemo: "FileInputStream" et
"FileOutputStream" fonctionnent t'es bien.

Mais comment faire pour lire, et surtout écrire de l'Unicode ?
J'ai bien regardé l'API java.io mais je ai des doutes ...

Merci d'avance.

1 réponse

Avatar
Frederic Lachasse
"Philippe" wrote in message
news:bgl7ms$ish$
Salut à tous,

Je voudrais lire et écrire des caractères dans un fichiers en récupérant
le

code binaire.
Si les caractères sont code en ASCII, no problemo: "FileInputStream" et
"FileOutputStream" fonctionnent t'es bien.

Mais comment faire pour lire, et surtout écrire de l'Unicode ?
J'ai bien regardé l'API java.io mais je ai des doutes ...


Java possède des fonctions pour convertir des "char" Java 16 bits en série
de bytes et vice versa. Cette conversion ce fait selon un "Charset". Parmi
les "Charset" disponible en Java, 4 convertissent en Unicode: "UTF-8",
"UTF-16", "UTF-16BE" et "UTF16LE". UTF-8 code chaque caractère Unicode en
sequence de 1, 2 ou 3 octets. Les autres codent en séquence de 2 octets,
UTF-16BE en Big-Endian, UTF-16LE en Little-Endian et UTF-16 utilise un "Byte
Order Mark" (caractère FEFF) pour déterminer le "byte order" little ou big
endian.

Les API qui convertissent sont principalements:

String(byte[], String charsetName): construit une chaine à partir de
byte[] codé avec charsetName.
String.getBytes(String charsetName): code un String en byte[] en
utilisant le charsetName.

java.io.OutputStreamWriter(java.io.OutputStream out, String
charsetName): crée un Writer (stream pour écrire des caractères) qui va
coder les caractères écrits en bytes en utilisant le charsetName pour les
écrires dans l'OutputStream out.
java.io.InputStreamReader(java.io.InputStream in, String charsetName):
crée un Reader (stream pour lire des caractères) qui va convertir les bytes
lus sur l'InputStream in en caractère en utilisant le charsetName.

Le JDK 1.4 ajoute dans Java.nio les classes Charset* qui permette de créer
ses propres conversions.

--
Frédéric Lachasse -