Fonction java de conversion de UTF-16 à UTF-8 ?

Signaler
Messages postés
56
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
5 décembre 2005
-
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006
-
Bonjour,

J'aurais besoin de convertir une chaine de caracteres de l'encoding UTF-16 à UTF-8.
Quelqu'un saurait si une fonction java existe pour effectuer cette transformation ?

Merci d'avance pour votre aide,

Cako19

8 réponses

Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

Toutes les chaines en Java sont UTF-8 par défaut ... regarde dans la javadoc et le specifiactions de la JVM ...
@+

[Responsable www.neogamedev.com et Admin CS]
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

Salut,

Les chars sont effectivement codé sur 16 bits, pour n'en récupérer que 8 il suffit de faire un masque et tu devrais retomber sur tes pattes:

String stMot = "Mot";
int iCodePoint = stMot.charAt(0) & 0xff;

Les poids ne te serve effectivement a rien si tu ne traite que des caractere occidentaux. Pour plus d'info, je te conseille je te conseille de jeter un oeil sur le site d'Unicode: http://www.unicode.org/charts/.

Si tu lis les infos depuis un fichier, utilise un DataInputStream, il y a des methodes qui lise directement uen UTF 8 ou en unsigned byte. Ce qui te fera peut etre gagner du temps.

Vers l'infini et au delà... [Q]
Messages postés
56
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
5 décembre 2005

Vous voulez dire que si j'ai la chaîne "été", juste en mettant un masque je pourrai obtenir automatiquement la chaine "été" ?
Messages postés
56
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
5 décembre 2005

je voulais dire :

"Vous voulez dire que si j'ai la chaîne "été", juste en mettant un masque je pourrai obtenir automatiquement la chaine
" ét é "
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

Ah ah.. excuse, autant pour moi... j avais pas bien compris... j ete plongé dans mon propre code... milles excuses :big)

Par contre pour ton soucis, je peux te conseiller de jeter un coup d'oeil sur la doc des DataInputStream et DataOutputStream, tu pourras peut etre y trouver ton bonheur.

Vers l'infini et au delà... [Q]
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

re

j ai jeter un oeil pour toi ... regarde si ca fait ton bonheur (fait juste un copier coller):

public static void main(String[] args) {
try{
StringBuffer stIn = new StringBuffer("été");

for(int i = 0; i < stIn.length(); i++)
System.out.println(i + "\t" + stIn.charAt(i) + "\t" + stIn.codePointAt(i) + "\t" + Integer.toHexString(stIn.codePointAt(i)));
System.out.println();

System.out.println("- UTF -");
ByteArrayOutputStream struct = new ByteArrayOutputStream(stIn.length());

DataOutputStream fOut = new DataOutputStream(struct);
fOut.writeUTF(stIn.toString());
fOut.close();
String stOut = struct.toString();
System.out.println(stOut);

for(int i = 0; i < stOut.length(); i++)
System.out.println(i + "\t" + stOut.charAt(i) + "\t" + stOut.codePointAt(i) + "\t" + Integer.toHexString(stOut.codePointAt(i)));
}catch(IOException ioe){
System.out.println(ioe.getMessage());
}
}

Vers l'infini et au delà... [Q]
Messages postés
56
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
5 décembre 2005

J'ai fait un copier/coller ...
Mon compilateur ne connait pas la méthode codePointAt. Je ne la retrouve pas, ni rien de semblable dans les méthodes de StringBuffer.
Pourrais tu me dire où elle se trouve stp ?

Merci d'avance,

Cako19
Messages postés
84
Date d'inscription
mardi 19 octobre 2004
Statut
Membre
Dernière intervention
6 octobre 2006

Excuse moi. Il s'agit d'une fonction disponible dans le JRE 1.5 qui est sorti debut automne. Le Codepoint est une nouvelle fonctionnalté, il permlmet de repéré les caractères dans une chaine par sont numero unicode, ca allege enormement le code.

Pour le code que je t ai filé, tu peux supprimer, ca n'a pas grde importance.
Par contre, rien que pour cette fonctionnalité je te conseille de passer en 1.5, c'est pratique comme tout... je sais meme plus comment je faisais avant.

Je te remet le code sans le codepoint (copier-coller):

public static void main(String[] args) {
try{
StringBuffer stIn = new StringBuffer("été");

for(int i = 0; i < stIn.length(); i++)
System.out.println(i + "\t" + stIn.charAt(i));
System.out.println();

System.out.println("- UTF -");
ByteArrayOutputStream struct = new ByteArrayOutputStream(stIn.length());

DataOutputStream fOut = new DataOutputStream(struct);
fOut.writeUTF(stIn.toString());
fOut.close();
String stOut = struct.toString();
System.out.println(stOut);

for(int i = 0; i < stOut.length(); i++)
System.out.println(i + "\t" + stOut.charAt(i));
}catch(IOException ioe){
System.out.println(ioe.getMessage());
}
}

Vers l'infini et au delà... [Q]