Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1340 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1816322
lapichon2
Posté le 25-11-2008 à 12:54:47  profilanswer
 

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

mood
Publicité
Posté le 25-11-2008 à 12:54:47  profilanswer
 

n°1816333
nerisson
Pic-pic
Posté le 25-11-2008 à 13:19:56  profilanswer
 

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
n°1816343
lapichon2
Posté le 25-11-2008 à 13:35:48  profilanswer
 

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! :-)

n°1816382
nerisson
Pic-pic
Posté le 25-11-2008 à 14:25:48  profilanswer
 

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
n°1816384
nerisson
Pic-pic
Posté le 25-11-2008 à 14:27:51  profilanswer
 

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


---------------
Light is right
n°1816483
lapichon2
Posté le 25-11-2008 à 16:15:25  profilanswer
 

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...)

n°1816673
superbob56
Posté le 25-11-2008 à 21:02:59  profilanswer
 

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.
n°1816885
lapichon2
Posté le 26-11-2008 à 10:58:56  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
Page web qui retourne du code xmlSupprimer une partie d'une chaine de caractère.
VBA: Créer un boutton dynamiquement ?Code pages jaunes
Créer un fichier jpg depuis un plot => installer un nouveau module ?Antiflood de caractere dans une chaine et accent
[HTML/Javascript/CSS] [resolu] spoiler une partie de tableauurl dans code php
logiciel "simple" pour créer une petite applicationStocker un espace dans chaine de caractère
Plus de sujets relatifs à : Hanzi, encodage UTF8: Créer un caractère à partir de son code unicode


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR