OVH Cloud OVH Cloud

Pb d'accents sous DOS avec PHP

7 réponses
Avatar
GIRARD Cedric
Bonjour,

Je suis en train de faire un script de migration de
fichiers (ainsi que les permissions du domaine qui vont avec) de windows
vers linux. Or sous DOS lorsque que je fais un echo d'une variable "calc
c:\temp\é.doc" il m'affiche bien l'accent mais lorsque que j'exécute
cette variable, il me ressort "Le fichier spécifié est introuvable".
D'après les tests que j'ai effectué il apparait que quand la variable
est exécutée via la commande exec() ou passthru() l'accent contenu dans
la variable disparait ce qui a pour incidence de ne pas trouver le
fichier, les fichiers sans accents ne posant pas problèmes. Je vois le
problème mais je ne sais pas comment le résoudre ... :-(

Merci beaucoup d'avance à la personne qui me dépannera ou me mettra sur
la piste pour me dépanner.

@ +

7 réponses

Avatar
CrazyCat
GIRARD Cedric wrote:
D'après les tests que j'ai effectué il apparait que quand la variable
est exécutée via la commande exec() ou passthru() l'accent contenu dans
la variable disparait ce qui a pour incidence de ne pas trouver le
fichier, les fichiers sans accents ne posant pas problèmes. Je vois le
problème mais je ne sais pas comment le résoudre ... :-(


Essaye en recodant les noms en utilisant les valeurs ASCII.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

Avatar
Jean-Marc Molina
GIRARD Cedric a écrit/wrote :
Je suis en train de faire un script de migration de
fichiers (ainsi que les permissions du domaine qui vont avec) de
windows vers linux. Or sous DOS lorsque que je fais un echo d'une
variable "calc c:tempé.doc" il m'affiche bien l'accent mais lorsque
que j'exécute cette variable, il me ressort "Le fichier spécifié est
introuvable". D'après les tests que j'ai effectué il apparait que
quand la variable est exécutée via la commande exec() ou passthru()
l'accent contenu dans la variable disparait ce qui a pour incidence
de ne pas trouver le fichier, les fichiers sans accents ne posant pas
problèmes. Je vois le problème mais je ne sais pas comment le
résoudre ... :-(


L'erreur peut venir de l'application "calc" qui ne sait pas gérer les
accents, j'ai eu le problème avec gzip alors que 7-Zip le permet. Vérifie
aussi que tes chemins sont corrects : et pas , ou / à la place des ...
Il faut aussi se méfier des espaces dans les chemins : "C:/Program
Files/...".

--
Jean-Marc.

Avatar
loufoque
Le terminal de Windows utilise CP850 (je ne sais pas si ça varie).
Néanmoins l'OS utilise un autre charset, qui est généralement
windows-1252 pour les états-unis, l'europe occidentale, etc.

Sous linux, généralement le terminal utilise le charset local, qui
dépend de la configuration. Souvent c'est soit ISO-8859-1 soit UTF-8
(sur les systèmes occidentaux).


GIRARD Cedric a dit le 19/09/2005 à 16:06:

Je suis en train de faire un script de migration de
fichiers (ainsi que les permissions du domaine qui vont avec) de windows
vers linux. Or sous DOS lorsque que je fais un echo d'une variable "calc
c:tempé.doc" il m'affiche bien l'accent


Apparemment, donc, cette variable est encodée en CP850.
Je savais pas qu'il y avait des gens qui codaient avec ce charset.


mais lorsque que j'exécute
cette variable, il me ressort "Le fichier spécifié est introuvable".
D'après les tests que j'ai effectué il apparait que quand la variable
est exécutée via la commande exec() ou passthru() l'accent contenu dans
la variable disparait


Il est probable que ces fonctions attendent du windows-1252.

Avatar
Olivier Miakinen

Je suis en train de faire un script de migration de
fichiers (ainsi que les permissions du domaine qui vont avec) de windows
vers linux. Or sous DOS lorsque que je fais un echo d'une variable "calc
c:tempé.doc" il m'affiche bien l'accent [...]


Quoique je ne voie pas trop le rapport avec PHP, voici quelques pistes.

Il faut savoir que la table de caractères par défaut de DOS est CP437
ou plus récemment CP850, table qui n'a rien à voir avec celle de Windows
(CP1252), cette dernière étant au contraire assez proche de ISO-8859-1.

Justement je suis en train de mettre au point une page HTML permettant
de comparer toutes ces tables. La version finale sera à l'adresse
<http://www.miakinen.net/vrac/charsets> (url qui ne changera pas) mais
une version beaucoup plus facile à utiliser se trouve à une adresse
temporaire : <http://www.miakinen.net/vrac/c06/charsets>.

D'après cette page, on voit que le « é » CP850 est encodé par un octet
de valeur 82 en hexadécimal (130 en décimal), ce qui correspond à un
guillemet bas en CP1252 (je ne peux pas transmettre ce caractère ici à
moins de violer l'interdiction d'utiliser autre chose que ISO-8859-1 ou
ISO-8859-15, mais tu peux le récupérer par copier-coller sur la page
signalée plus haut -- il ressemble à une virgule).

Si tu peux résoudre ton problème en essayant de lire un truc qui
ressemble à c:temp,.doc au lieu de c:tempé.doc, tant mieux pour
toi. Mais à l'avenir essaye d'éviter les caractères non-ASCII dans
les noms de fichiers, ça t'épargnera pas mal de soucis.

Cordialement,
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
GIRARD Cedric

GIRARD Cedric a écrit/wrote :


Je suis en train de faire un script de migration de
fichiers (ainsi que les permissions du domaine qui vont avec) de
windows vers linux. Or sous DOS lorsque que je fais un echo d'une
variable "calc c:tempé.doc" il m'affiche bien l'accent mais lorsque
que j'exécute cette variable, il me ressort "Le fichier spécifié est
introuvable". D'après les tests que j'ai effectué il apparait que
quand la variable est exécutée via la commande exec() ou passthru()
l'accent contenu dans la variable disparait ce qui a pour incidence
de ne pas trouver le fichier, les fichiers sans accents ne posant pas
problèmes. Je vois le problème mais je ne sais pas comment le
résoudre ... :-(




L'erreur peut venir de l'application "calc" qui ne sait pas gérer les
accents, j'ai eu le problème avec gzip alors que 7-Zip le permet. Vérifie
aussi que tes chemins sont corrects : et pas , ou / à la place des ...
Il faut aussi se méfier des espaces dans les chemins : "C:/Program
Files/...".



Tout ça a déjà été vérifié.


@ +


Avatar
GIRARD Cedric

GIRARD Cedric wrote:

D'après les tests que j'ai effectué il apparait que quand la variable
est exécutée via la commande exec() ou passthru() l'accent contenu
dans la variable disparait ce qui a pour incidence de ne pas trouver
le fichier, les fichiers sans accents ne posant pas problèmes. Je
vois le problème mais je ne sais pas comment le résoudre ... :-(



Essaye en recodant les noms en utilisant les valeurs ASCII.

idem :-(



Avatar
GIRARD Cedric

Le terminal de Windows utilise CP850 (je ne sais pas si ça varie).
Néanmoins l'OS utilise un autre charset, qui est généralement
windows-1252 pour les états-unis, l'europe occidentale, etc.

Sous linux, généralement le terminal utilise le charset local, qui
dépend de la configuration. Souvent c'est soit ISO-8859-1 soit UTF-8
(sur les systèmes occidentaux).


GIRARD Cedric a dit le 19/09/2005 à 16:06:

Je suis en train de faire un script de migration de
fichiers (ainsi que les permissions du domaine qui vont avec) de
windows vers linux. Or sous DOS lorsque que je fais un echo d'une
variable "calc c:tempé.doc" il m'affiche bien l'accent



Apparemment, donc, cette variable est encodée en CP850.
Je savais pas qu'il y avait des gens qui codaient avec ce charset.


mais lorsque que j'exécute cette variable, il me ressort "Le fichier
spécifié est introuvable". D'après les tests que j'ai effectué il
apparait que quand la variable est exécutée via la commande exec() ou
passthru() l'accent contenu dans la variable disparait



Il est probable que ces fonctions attendent du windows-1252.


En effet il faut faire un str_replace de chr(130) vers chr(233)

Merci msieur !