creer des fichiers avec accent sous fat32

Le
Fred Kap
Bonjour,
en C++ , j'ai a créer des fichiers sous une clé usb avec des accents .
sous ext3 ca marche mais pas en FAT32 , existe t_il des fonctions qui
convertissent les caractères accentuées ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane CHAZELAS
Le #19480811
2009-06-03, 10:40(+02), Fred Kap:
Bonjour,
en C++ , j'ai a créer des fichiers sous une clé usb avec des accents .
sous ext3 ca marche mais pas en FAT32 , existe t_il des fonctions qui
convertissent les caractères accentuées ?



Faut encoder le nom dans le charset utilisé dans les options de
montage du filesystem.

Sous Linux:

~$ grep vfat /proc/mounts
/dev/loop0 /mnt vfat rw,fmask22,dmask22,codepage=cp437,iocharset=utf8 0 0

Dans mon cas, il me faut ecrire mes noms de fichiers en utf8,
donc pas 0xe9 pour é (comme dans iso8859-1/15...) mais comme

/mnt$ sudo touch $'xe9'
touch: setting times of `é': No such file or directory
/mnt$ echo $'xe9' | recode l1..u8 | od -tx1
0000000 c3 a9 0a
0000003
/mnt$ sudo touch $'xc3xa9'
/mnt$ ls | od -tx1
0000000 c3 a9 0a
0000003

Le mieux est de monter ta clef usb avec un iocharset qui
correspond a celui que tu utilises pour communiquer avec tes
users.

Sinon, pour les conversions, regarde du cote de iconv(3).

--
Stéphane
Olivier Miakinen
Le #19482301
Le 03/06/2009 19:41, Stephane CHAZELAS répondait à Fred Kap :

en C++ , j'ai a créer des fichiers sous une clé usb avec des accents .
sous ext3 ca marche mais pas en FAT32 , existe t_il des fonctions qui
convertissent les caractères accentuées ?



Faut encoder le nom dans le charset utilisé dans les options de
montage du filesystem.

Sous Linux:

~$ grep vfat /proc/mounts
/dev/loop0 /mnt vfat rw,fmask22,dmask22,codepage=cp437,iocharset=utf8 0 0

Dans mon cas, il me faut ecrire mes noms de fichiers en utf8,



... mais si j'en crois le codepage, le répertoire de caractères
disponible est celui de CP437. Tu as donc droit à certaines lettres
grecques, à deux petits souriards, aux quatre symboles des jeux de
cartes, etc., mais pas à « ½ », ni bien sûr à « ¤ ».

Cf.
Par curiosité, que se passe-t-il si tu essayes d'utiliser un caractère
correctement encodé en UTF-8, mais n'appartenant pas à CP437, comme par
exemple le caractère © (C2 A9 en UTF-8) ?

donc pas 0xe9 pour é (comme dans iso8859-1/15...)



... ni 0x82 (comme dans CP437/CP850) :-)

mais comme

[...] c3 a9 [...]

Le mieux est de monter ta clef usb avec un iocharset qui
correspond a celui que tu utilises pour communiquer avec tes
users.



Oui.

Sinon, pour les conversions, regarde du cote de iconv(3).



Oui, aussi.

--
Olivier Miakinen
Stephane CHAZELAS
Le #19483231
2009-06-03, 23:49(+02), Olivier Miakinen:
Le 03/06/2009 19:41, Stephane CHAZELAS répondait à Fred Kap :

en C++ , j'ai a créer des fichiers sous une clé usb avec des accents .
sous ext3 ca marche mais pas en FAT32 , existe t_il des fonctions qui
convertissent les caractères accentuées ?



Faut encoder le nom dans le charset utilisé dans les options de
montage du filesystem.

Sous Linux:

~$ grep vfat /proc/mounts
/dev/loop0 /mnt vfat rw,fmask22,dmask22,codepage=cp437,iocharset=utf8 0 0

Dans mon cas, il me faut ecrire mes noms de fichiers en utf8,



... mais si j'en crois le codepage, le répertoire de caractères
disponible est celui de CP437. Tu as donc droit à certaines lettres
grecques, à deux petits souriards, aux quatre symboles des jeux de
cartes, etc., mais pas à « ½ », ni bien sûr à « ¤ ».


[...]

Je pense que le cp437, c'est seulement pour les noms courts
(8+3) (pour la compatibilité MS-DOS).

Les noms longs sont codés en UTF16/UCS2 dans le filesystem, le
iochaset c'est juste pour l'adaptation a l'API Unix qui
fonctionne avec des chaines de caracteres.

--
Stéphane
Olivier Miakinen
Le #19483321
Le 04/06/2009 08:04, Stephane CHAZELAS m'a répondu :

Je pense que le cp437, c'est seulement pour les noms courts
(8+3) (pour la compatibilité MS-DOS).

Les noms longs sont codés en UTF16/UCS2 dans le filesystem, le
iocharset c'est juste pour l'adaptation a l'API Unix qui
fonctionne avec des chaines de caracteres.



Merci, c'est très clair.

--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme