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

cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005 - 16 déc. 2004 à 14:38
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006 - 17 déc. 2004 à 10:48
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
A voir également:

8 réponses

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
16 déc. 2004 à 16:22
: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]
0
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
16 déc. 2004 à 17:41
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]
0
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
16 déc. 2004 à 18:07
Vous voulez dire que si j'ai la chaîne "été", juste en mettant un masque je pourrai obtenir automatiquement la chaine "été" ?
0
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
16 déc. 2004 à 18:12
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 é "
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
17 déc. 2004 à 08:58
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]
0
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
17 déc. 2004 à 09:05
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]
0
cs_Cako19 Messages postés 56 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 5 décembre 2005
17 déc. 2004 à 10:24
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
0
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
17 déc. 2004 à 10:48
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]
0
Rejoignez-nous