Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

creer des fichiers avec accent sous fat32

4 réponses
Avatar
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 ?

4 réponses

Avatar
Stephane CHAZELAS
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
Avatar
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 à « ¤ ».

Cf. <http://www.miakinen.net/vrac/charsets/?o6=CP437&or=6>.

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
Avatar
Stephane CHAZELAS
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
Avatar
Olivier Miakinen
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