écrire dans un fichier

fatjoe
écrire dans un fichier

bonjour,
voila mon probleme

le mot "voiture" correspond à 0076 006F 0069 0074 0075 0072 0065 en utf 16 et 76 6F 69 74 75 72 65 en utf8,
alors suppoosant j'ai des codes en utf16 ou utf8 ,comment je peut les écrire dans un fichier non pas sous forme de utf16 ou utf8 mais sous forme de caractères ç à dire on ouvrant le fichier je trouve des caractères.
merci bien

K-lo

Commence par regarder cette discussion ;)

http://www.programmez.com/forum/viewtopic.php?t=682
Et pis tu as les fonctions de la bibliothèque standars wofstream et wifstream pour l'écriture et la lecture de flux.

En revanche tu n'aurai pas du poser cette question avec l'autre que tu as posté juste avant ?

fredericmazue

Quote:
le mot "voiture" correspond à 0076 006F 0069 0074 0075 0072 0065 en utf 16

Non ça c'est de l'utf-8 ;)
Et puis de quel utf-16 voulais tu parler ? UTF-16BE ? UTF16LE ?

Quote:
76 6F 69 74 75 72 65 en utf8,

Ceci n'est en aucun cas de l'utf-8 mais du simple ACSII :lol:

Quote:
comment je peut les écrire dans un fichier non pas sous forme de utf16 ou utf8 mais sous forme de caractères ç à dire on ouvrant le fichier je trouve des caractères.

Pour résoudre ton exercice d'école, ce qu'on attend de toi je pense, c'est que tu étudies les systèmes de codage et que tu écrives de petites routines pour les mettre en oeuvre.

Les systèmes de codages utf sont très bien expliqués sur Wikipedia

fatjoe

va voir ça et essaye de voir si le code de voiture est bien ce que j'ai écrit ou pas
http://hapax.qc.ca/conversion.fr.html
remarque: ce n'est pas un excercice d'école c'est une gigantesque application, cette fonction est une goutte de mon application, j'ai pensé que vous aller m'aider mais il parait que je me trompe, en tout cas merci

fredericmazue

Mais si on veut t'aider.

fredericmazue

k-lo wrote:
Désolé mais le site que tu donne ne t'informe pas sur tout

Sans même parler de ça, en lisant le post de départ et aussi l'autre juste à côté dans ce forum, il m'a semblé que le problème à la base est un manque d'information sur Unicode.
C'est vrai aussi que j'aurais pu répondre autrement dans ma première réponse.

Tiens pour relancer le débat, et peut être pour déboucher sur quelque chose. On a vu plus haut un encodage utf-16 et utf-8 de "voiture".
Il serais intéressant de voit l'encodage de "fâché" par exemple.

K-lo

Quote:
Quote:

Désolé mais le site que tu donne ne t'informe pas sur tout

Sans même parler de ça, en lisant le post de départ et aussi l'autre juste à côté dans ce forum, il m'a semblé que le problème à la base est un manque d'information sur Unicode.
C'est vrai aussi que j'aurais pu répondre autrement dans ma première réponse.

:lol: Désolé frédéric mais j'ai supprimer mon post
wikipedia a fini par m'embrouiller donc j'ai preféré m'abstenir plutot que de raconter n'importe quoi
donc la citation que tu fais n'existe plus

Pourquoi ça m'embrouille c'est que on dit que l'utf-8 est sur 1 octet si :

Quote:
tout octet de bit de poids fort nul code un caractère US-ASCII sur un octet ;

hors 0066 par exemple, la traduction devrait s'arrêter au premier octet ou j'ai encore rien compris :?

Quote:
Il serais intéressant de voit l'encodage de "fâché" par exemple.
Bah le site code sur 2 octets et pas sur 1 comme ça pouvait le sous entendre
fredericmazue

C'est simple.
en UTF-8 un octet ASCII pur, j'insiste sur le pur, est codé sur 1 octet effectivement. Ca veux dire que pour tout code ASCII de 0 à 127 (huitième bit nul) le codage utf-8 revient à de l'ASCII donc à un non-codage.
C'est pour ça que j'ai fait une réponse sous forme de plaisanterie au troisième degré avec mon premier post, parce que ça na pas beaucoup de sens de prendre "voiture" qui est de l'ASCII pur, pour regarder ce que ça donne en utf-8. Mais bon j'aurais sans doute mieux fait de m'abstenir, puisque je suis le seul à m'être compris :oops:

Et c'est pour que j'ai proposé "fâché", pour le â et le é, qui ne sont pas de l'ASCII pur, mais de l'étendu, au délà des 128 premiers codes, et donc d'une valeur >= 128 donc avec un huitième bit non nul. Dans ce cas en effet, le codage en utf-8 est sur 2 octets.
utf-8 est un codage à géométrie variable :) Un caractère Unicode se code avec des valeurs s'étendant de 1 à 4 octets

fatjoe

alors mes amis je doit faire quoi? je suis vraiment perdu.
:cry: :cry: :cry: :cry: :cry: :cry:

fredericmazue

Quote:
alors mes amis

Tiens nous sommes tes amis maintenant ?

Quote:
je doit faire quoi? je suis vraiment perdu.

J'ai déjà essayé plusieurs fois de te le dire et de plusieurs façons. Je fais une nouvelle tentative, aussi concise et claire que j'en suis capable.

1) tant que tu voudras coder/écrire du "voiture" ta question n'a pas de sens, car en utf-8 le codage est le même qu'en ASCII. Ce qui veut dire que tu écris les octets dans le fichier exactement de la même façon que si c'était de l'ASCII. Et sur le fond, ça ne change pas grand chose avec utf-16. Simple ajout d'un octet nul dans ton cas. Mais là on est loin d'un "vrai" encodage. Donc pour parler en disant quelque chose qui a du sens, j'ai proposé l'exemple "fâché" plutôt que "voiture"

2) tu vas sur le site que tu as toi même indiqué et tu regardes par exemple en utf-8 comment "fâché" est codé. Tu va voir 66 C3 A2 63 68 C3 A9 soit 6 octets. parce que le â et le é sont de l'ASCII étendu, et là ils sont "vraiment" codés. Et dans leur cas, avec 2 octets chacun.

3) comment sont-ils codés ? tu vas à http://fr.wikipedia.org/wiki/UTF-8 (et à http://fr.wikipedia.org/wiki/UTF-16 pour utf-16) tu lis les explications, et si tu as compris, tu peux vérifier que 66 C3 A2 63 68 C3 A9 était juste.

4) maintenant que tu as compris, tu écris une routine qui code chaque caractère d'une chaîne, et tu écris le résultat dans le fichier un caractère après l'autre.

f -> 66 dans le fichier
â -> C3 A2 dans le fichier

et ainsi de suite.

(remarque: je dis un caractère après l'autre parce que c'est le plus simple, je ne dis pas que c'est le plus performant.)

5) pour lire. Il faut aussi que tu pondes une routine, mais là c'est un peu plus difficile. Tu lis d'abord un octet dans le fichier. Soit le résultat est immédiat , ex:66 -> f = 66
soit l'octet que tu lis te dis, par ses bits de poids fort, comment le caractère est codé. Par exemple C3 ca t'annonce que c'est codé sur 2 octets, si tu as compris le système. Donc tu lis un deuxième octet. De ces deux octets tu vires les bits de codage avecu n masque binaire. Tu assembles les bits qu'il te reste et tu as ton caractère.

C3 A2 -> E2

Et ainsi de suite jusqu'à la fin du fichier.

Bon courage pour ton application giganteque :D