Hanzi, encodage UTF8: Créer un caractère à partir de son code unicode

Hanzi, encodage UTF8: Créer un caractère à partir de son code unicode - Java - Programmation

Marsh Posté le 25-11-2008 à 12:54:47    

Bonjour,
 
Je cherche à créer enregistrer dans un fichier texte utf8 un caractère chinois (hanzi) à partir de son code unicode: exemple U+5C0F (qui en chinois signifie "petit"...)
En java il est possible d'instancier un caractère de la sorte:
ex:
Character petit = new Character('\u5C0F');
 
Le problème est que je vais lire le code correspondant (5C0F) dans un fichier texte, si je veux instancier mon caractère je suis obligé de passer par une chaîne de caractères:
ex:
String codeCaractere = lireFichier();
Character petit = new Character("\u"+codeCaractere);
Et cà ne fonctionne pas...
Je ne vois aucune solution pour créer un caractère unicode à partir de son code sans l'inscrire en brute dans le programme (comme le premier exemple)).
 
Je cherche depuis 4 heures sur internet sans trouver de réponse (et en y laissant mes cheveux...)
Avez vous des idées? où j'abandonne mes études de chinois?... (j'etudie le chinois dans une université à Shenzhen :-) )
 
Merci pour vos coups de pouce!!
 
Pierre

Reply

Marsh Posté le 25-11-2008 à 12:54:47   

Reply

Marsh Posté le 25-11-2008 à 13:19:56    

Tu ne peut pas mettre ton caractère directement dans un fichier, enregistrer ce fichier avec l'encoding qui va bien, puis lire ce fichier en Java en précisant l'encoding utilisé ?


---------------
Light is right
Reply

Marsh Posté le 25-11-2008 à 13:35:48    

nerisson a écrit :

Tu ne peut pas mettre ton caractère directement dans un fichier, enregistrer ce fichier avec l'encoding qui va bien, puis lire ce fichier en Java en précisant l'encoding utilisé ?


 
Oui, cà marcherait parfaitement, mais le problème c'est que je ne récupère que le code unicode (ex: 5C0F).
Je l'obtiens en parsant une page internet contenant des informations sur ce caractère (cf: http://www.cojak.org/index.php?fun [...] erm=5C0F).  
Je n'ai donc pas accès au caractère réel, mais à son code unicode.
 
Merci pour ton idée! :-)

Reply

Marsh Posté le 25-11-2008 à 14:25:48    

Ah, j'avais mal compris ton problème.
Si tu essayait plutôt de passer par le numéro de ton caractère, comme ceci:
 

char c = 'u5C0F';
String s = "5C0F";
/* Transformation chaine en caractere */
long l = Long.parseLong(s, 16);
char c2 = (char) l;
/* Affichage pour vérification */
System.out.println(c);
System.out.println(c2);
System.out.println(c == c2);


---------------
Light is right
Reply

Marsh Posté le 25-11-2008 à 14:27:51    

En fait pas besoin de passer Long, un Integer.parseInt() suffit.


---------------
Light is right
Reply

Marsh Posté le 25-11-2008 à 16:15:25    

nerisson a écrit :

En fait pas besoin de passer Long, un Integer.parseInt() suffit.


 
Merci!!!
C'était si simple en fait...
c'est vrai que "char" s'appuie directement sur l'unicode, et la convertion en entier décimal à partir du code hexa fonctionne.
Merci mille fois! je peux enfin retrourner à mon programme de flashcard...
 
(mon seul regret est de ne pas avoir posé la question plus tôt...)

Reply

Marsh Posté le 25-11-2008 à 21:02:59    

Par contre fais attention à la taille de tes caractères dans ton fichier texte, parce qu'en UTF-8 les caractères peuvent être écrits sur 1, 2, 3 ou 4 octets.
Dans l'exemple que tu as données, c'était sur 2 octets.
Donc si tu lis ton fichier par paquet de 2 octets, ça implique que les caractères 'simples' (par exemple A) soient 'paddés' par des zéros à gauche et que tu ne peux pas avoir de caractère sur plus de 2 octets.
Sinon si tu veux gérer toutes le tailles possibles, il faut que tu lise chaque octet du fichier un par un et selon son masque de chaque 'premier octet' d'un caractère tu sais sa taille donc le nombre de caractère restant à lire pour finir le caractère ...
En bref, fais bien gaffe à ça parce que ça pourrait te réserver une mauvaise surprise si tu le gère mal ...


---------------
By bob.
Reply

Marsh Posté le 26-11-2008 à 10:58:56    

superbob56 a écrit :

Par contre fais attention à la taille de tes caractères dans ton fichier texte, parce qu'en UTF-8 les caractères peuvent être écrits sur 1, 2, 3 ou 4 octets.
Dans l'exemple que tu as données, c'était sur 2 octets.
Donc si tu lis ton fichier par paquet de 2 octets, ça implique que les caractères 'simples' (par exemple A) soient 'paddés' par des zéros à gauche et que tu ne peux pas avoir de caractère sur plus de 2 octets.
Sinon si tu veux gérer toutes le tailles possibles, il faut que tu lise chaque octet du fichier un par un et selon son masque de chaque 'premier octet' d'un caractère tu sais sa taille donc le nombre de caractère restant à lire pour finir le caractère ...
En bref, fais bien gaffe à ça parce que ça pourrait te réserver une mauvaise surprise si tu le gère mal ...


 
Merci pour ces conseils.
Je rencontre bien ce problème de taille des caractères. Mais heureusement je les lis à partir d'un codage HTML Unicode Entities, qui énumère donc les caractères en les enfermant dans une structure &#x____;  (ex: 鲖  ). Il est facile dans ce contexte de s'assurer de la taille, qui va de "x" à ";".
Cela nécessite juste de parser proprement le fichier. (en effet j'ai rencontré des surprises ;) )


Message édité par lapichon2 le 26-11-2008 à 10:59:53
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed