Lire et récuperer des caractères unicode dans un fichier texte. HELP T_T [Résolu]

cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention - 31 mai 2008 à 18:05 - Dernière réponse : cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention
- 4 juin 2008 à 21:20
Bonjour.
Je suis confronté à un problème de taille depuis plusieurs jours et je suis a deux doigt de laisser tomber.
Je doit lire (et ensuite récupérer dans un tableau, des caratcères unicode (japonais) dans un fichier texte) j'ai utilisé tout ce qui existe (il me semble):
-fread
-fgetws: fonction très etrange qui pour deux apels succesif identiques lira une fois corectement et une autre fois de facon incomplète (j'ai apprit que c'est une fonction peu fiable).
-fgetwc, getwc.
bref...le fait est que j'ai souvent un probleme de récuperation des caractere (fgetws récuperai bien mais de façon parfois imcompréhensible).
J'ai pourtant déclaré mes tableau en wchar_t.

Pour l'instant le programme (de traduction par comparaison) fonctionne très bien si j'entre manuellement les listes de caractères dans les tableau placé dans un fichier .h (2000 mot à écrire ......c fatigant et rageant et du coup sa réduit a neant les chance de pouvoir partager le log).
Help vous etes fort vous pouvez y arriver^^.
Ouvert à toute proposition.
Merci.
Afficher la suite 

5 réponses

Répondre au sujet
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 1 juin 2008 à 17:33
+1
Utile
Oops pardons, si on ajoute un 0 de fin de chaine, ce ne sera plus taille_du_buffer qui pourra être lu mais taille_du_buffer-1

wchar_t tab[300];
int i;

i = fread(tab, sizeof(wchar_t), 299, file);
tab[i] = 0;

C++ (@++)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SAKingdom
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 31 mai 2008 à 18:34
0
Utile
wchar_t tab[300];

fread(tab, sizeof(wchar_t), 300, file);

C++ (@++)
Commenter la réponse de SAKingdom
cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention - 1 juin 2008 à 11:29
0
Utile
Merci d'avoir prit le temps de me répondes SAKingdom.
Sa à l'air de marché!^^(les kanjis (caractere japonais) s'afichent  mal dans la console ce qui est normal, mais au moin en comptant 3 caractere par kanji le compte y est^^).

Mais a chaque fois que j'ai utilisé cette fonction pour lire ces caracteres japonais j'ai toujour eu deux ou trois caracteres bizares et suplementaire en debut de toute premiere ligne. D'ou viennent-ils et comment les supprimer?
Et s'aurai-tu quel fonction utiliser pour les ecrire dans un fichier texte (wprintf?)?
Merci.
Commenter la réponse de cs_amentag
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 1 juin 2008 à 17:13
0
Utile
As tu ajouté le 0 de fin de chaine ?



wchar_t tab[300];
int i;

i = fread(tab, sizeof(wchar_t), 300, file);
tab[i] = 0;

Pour écrire dans un fichier, c'est, tout simplement, fwrite qui fonctionne comme fread.

fwrite(buffer, taille_dun_element, nombre_delements_a_ecrire, flux);

wprintf sert à écrire des chaines unicode à la console. C'est probablement ce qu'il te faut pour afficher.

Au passage, fread, fwrite et ce genre de fonctions se fout complètement du type d'encodage des caractères voir même du type de donnée.
Ces fonctions servent à lire et écrire des données binaires (qui peuvent très bien être des chaines de caractère Unicode ou encore un tableau de int).
Aucune conversion, traitement ou quoi que ce soit n'est effectué par ces fonctions. Tout est écrit (ou lu) en brute.

C++ (@++)
Commenter la réponse de SAKingdom
cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention - 4 juin 2008 à 21:20
0
Utile
Merci
^^
Merci.
Commenter la réponse de cs_amentag

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.