je lis un fichier "setup.yaml" écrit par ruby, il est encodé en UTF-8 NO
BOM.
pour lire son contenu, depuis PHP, je fais :
$setup=yaml_parse_file('../setup.yaml');
[...]
foreach ($parameters_a as $key => $value) {
echo "$key => $value<br />";
foreach ($value as $cle => $valeur){
echo "$cle => $valeur<br />";
echo utf8_decode ($cle) . " => " . utf8_decode ($valeur) . "<br />";
}
echo "<br />";
}
echo "<br /><br />";
ce que j'obtiens, par exemple :
group => Médical // correspond à echo "$cle => $valeur<br />";
group => Médical // correspond à echo utf8_decode ($cle) . " => " .
utf8_decode ($valeur) . "<br />";
mon fichier php a le header :
header("Content-Type: text/html;charset=utf-8");
et mon butineur (Google Chrome 16 et Firefox 10) voient bien ce fichier
comme étant en UTF-8
la doc d'utf8_decode() dit qu'utf8_decode() décode la chaîne data, en
supposant qu'elle est au format UTF-8, et la convertit au format ISO-8859-1.
donc le flux parsé par yaml_parse_file('../setup.yaml')
est mal décodé ??? je ne comprends pas pourquoi utf8_decode me donne de
l'UTF-8, ce que j'espérais obtenir dès le départ...
sur la doc :
<http://www.php.net/manual/fr/function.yaml-emit-file.php>
il y a bien une option, à l'écriture correspondant à l'encodage.
mais sur la doc de yaml_parse_file :
<http://www.php.net/manual/fr/function.yaml-parse-file.php>
il n'y est pas fait mention d'une option spécifiant l'encodage...
Directive Local Value Master Value
yaml.decode_binary 0 0
dans le fichier setup.yml d'origine, M"dical
est codé ainsi :
MxC3xA9dical
je lis un fichier "setup.yaml" écrit par ruby, il est encodé en UTF-8 NO
BOM.
pour lire son contenu, depuis PHP, je fais :
$setup=yaml_parse_file('../setup.yaml');
[...]
foreach ($parameters_a as $key => $value) {
echo "$key => $value<br />";
foreach ($value as $cle => $valeur){
echo "$cle => $valeur<br />";
echo utf8_decode ($cle) . " => " . utf8_decode ($valeur) . "<br />";
}
echo "<br />";
}
echo "<br /><br />";
ce que j'obtiens, par exemple :
group => Médical // correspond à echo "$cle => $valeur<br />";
group => Médical // correspond à echo utf8_decode ($cle) . " => " .
utf8_decode ($valeur) . "<br />";
mon fichier php a le header :
header("Content-Type: text/html;charset=utf-8");
et mon butineur (Google Chrome 16 et Firefox 10) voient bien ce fichier
comme étant en UTF-8
la doc d'utf8_decode() dit qu'utf8_decode() décode la chaîne data, en
supposant qu'elle est au format UTF-8, et la convertit au format ISO-8859-1.
donc le flux parsé par yaml_parse_file('../setup.yaml')
est mal décodé ??? je ne comprends pas pourquoi utf8_decode me donne de
l'UTF-8, ce que j'espérais obtenir dès le départ...
sur la doc :
<http://www.php.net/manual/fr/function.yaml-emit-file.php>
il y a bien une option, à l'écriture correspondant à l'encodage.
mais sur la doc de yaml_parse_file :
<http://www.php.net/manual/fr/function.yaml-parse-file.php>
il n'y est pas fait mention d'une option spécifiant l'encodage...
Directive Local Value Master Value
yaml.decode_binary 0 0
dans le fichier setup.yml d'origine, M"dical
est codé ainsi :
MxC3xA9dical
je lis un fichier "setup.yaml" écrit par ruby, il est encodé en UTF-8 NO
BOM.
pour lire son contenu, depuis PHP, je fais :
$setup=yaml_parse_file('../setup.yaml');
[...]
foreach ($parameters_a as $key => $value) {
echo "$key => $value<br />";
foreach ($value as $cle => $valeur){
echo "$cle => $valeur<br />";
echo utf8_decode ($cle) . " => " . utf8_decode ($valeur) . "<br />";
}
echo "<br />";
}
echo "<br /><br />";
ce que j'obtiens, par exemple :
group => Médical // correspond à echo "$cle => $valeur<br />";
group => Médical // correspond à echo utf8_decode ($cle) . " => " .
utf8_decode ($valeur) . "<br />";
mon fichier php a le header :
header("Content-Type: text/html;charset=utf-8");
et mon butineur (Google Chrome 16 et Firefox 10) voient bien ce fichier
comme étant en UTF-8
la doc d'utf8_decode() dit qu'utf8_decode() décode la chaîne data, en
supposant qu'elle est au format UTF-8, et la convertit au format ISO-8859-1.
donc le flux parsé par yaml_parse_file('../setup.yaml')
est mal décodé ??? je ne comprends pas pourquoi utf8_decode me donne de
l'UTF-8, ce que j'espérais obtenir dès le départ...
sur la doc :
<http://www.php.net/manual/fr/function.yaml-emit-file.php>
il y a bien une option, à l'écriture correspondant à l'encodage.
mais sur la doc de yaml_parse_file :
<http://www.php.net/manual/fr/function.yaml-parse-file.php>
il n'y est pas fait mention d'une option spécifiant l'encodage...
Directive Local Value Master Value
yaml.decode_binary 0 0
dans le fichier setup.yml d'origine, M"dical
est codé ainsi :
MxC3xA9dical
Soit dit en passant, si le setup.yml est la même chose que le
setup.yaml dont tu parlais au début, et s'il est donc « encodé
en UTF-8 NO BOM » (je te cite), alors je ne vois pas pourquoi
s'embêter avec des xNN illisibles au lieu de mettre les vrais
caractères ! En effet, je ne connaissais pas YAML, mais une
recherche Google m'indique que la syntaxe YAML a été conçue
spécifiquement pour être facilement lisible par les gens
plutôt que par les machines.
Directive Local Value Master Value
yaml.decode_binary 0 0
Et ça, tu sais ce que ça veut dire ?
Soit dit en passant, si le setup.yml est la même chose que le
setup.yaml dont tu parlais au début, et s'il est donc « encodé
en UTF-8 NO BOM » (je te cite), alors je ne vois pas pourquoi
s'embêter avec des xNN illisibles au lieu de mettre les vrais
caractères ! En effet, je ne connaissais pas YAML, mais une
recherche Google m'indique que la syntaxe YAML a été conçue
spécifiquement pour être facilement lisible par les gens
plutôt que par les machines.
Directive Local Value Master Value
yaml.decode_binary 0 0
Et ça, tu sais ce que ça veut dire ?
Soit dit en passant, si le setup.yml est la même chose que le
setup.yaml dont tu parlais au début, et s'il est donc « encodé
en UTF-8 NO BOM » (je te cite), alors je ne vois pas pourquoi
s'embêter avec des xNN illisibles au lieu de mettre les vrais
caractères ! En effet, je ne connaissais pas YAML, mais une
recherche Google m'indique que la syntaxe YAML a été conçue
spécifiquement pour être facilement lisible par les gens
plutôt que par les machines.
Directive Local Value Master Value
yaml.decode_binary 0 0
Et ça, tu sais ce que ça veut dire ?
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
oui, oui, il n'y a qu'un fichier "setup.yml" écrit par ruby 1.8.x sous
Mac OS X et lu par php 5.3.6 sous Xubuntu 11.10.
le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
mais bon, je commence à piger ce qui se passe.
en fait "Médical" est une string provenant du carnet d'adresse, je
suppose qu'elle est en UTF-8 "à la mac OS X" c'est-à-dire quelque chose
comme :
"Me'dical", l'accent du é étant placé à côté du e.
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
Directive Local Value Master Value
yaml.decode_binary 0 0
Et ça, tu sais ce que ça veut dire ?
oui :
yaml.decode_binary boolean
Off par défaut, si mis à on : permet le décodage des entités binaires
base64 ayant le tag explicite "tag:yaml.org,2002:binary".
cf. <http://php.net/manual/fr/yaml.configuration.php>
en tout cas, merci bien d'avoir répondu, sans avoir la solution, je sais
(devine) mieux d'où vient le problème...
oui, oui, il n'y a qu'un fichier "setup.yml" écrit par ruby 1.8.x sous
Mac OS X et lu par php 5.3.6 sous Xubuntu 11.10.
le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
mais bon, je commence à piger ce qui se passe.
en fait "Médical" est une string provenant du carnet d'adresse, je
suppose qu'elle est en UTF-8 "à la mac OS X" c'est-à-dire quelque chose
comme :
"Me'dical", l'accent du é étant placé à côté du e.
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
Directive Local Value Master Value
yaml.decode_binary 0 0
Et ça, tu sais ce que ça veut dire ?
oui :
yaml.decode_binary boolean
Off par défaut, si mis à on : permet le décodage des entités binaires
base64 ayant le tag explicite "tag:yaml.org,2002:binary".
cf. <http://php.net/manual/fr/yaml.configuration.php>
en tout cas, merci bien d'avoir répondu, sans avoir la solution, je sais
(devine) mieux d'où vient le problème...
oui, oui, il n'y a qu'un fichier "setup.yml" écrit par ruby 1.8.x sous
Mac OS X et lu par php 5.3.6 sous Xubuntu 11.10.
le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
mais bon, je commence à piger ce qui se passe.
en fait "Médical" est une string provenant du carnet d'adresse, je
suppose qu'elle est en UTF-8 "à la mac OS X" c'est-à-dire quelque chose
comme :
"Me'dical", l'accent du é étant placé à côté du e.
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
Directive Local Value Master Value
yaml.decode_binary 0 0
Et ça, tu sais ce que ça veut dire ?
oui :
yaml.decode_binary boolean
Off par défaut, si mis à on : permet le décodage des entités binaires
base64 ayant le tag explicite "tag:yaml.org,2002:binary".
cf. <http://php.net/manual/fr/yaml.configuration.php>
en tout cas, merci bien d'avoir répondu, sans avoir la solution, je sais
(devine) mieux d'où vient le problème...
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
bon, je viens d'essayer en ligne de commande :
$ iconv -f UTF-8-MAC -t UTF-8 setup.yaml > setup-utf8.yaml
pas de chance, ça me donne tjs :
MxC3xA9dical
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
bon, je viens d'essayer en ligne de commande :
$ iconv -f UTF-8-MAC -t UTF-8 setup.yaml > setup-utf8.yaml
pas de chance, ça me donne tjs :
MxC3xA9dical
plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
comment transcoder en UTF-8 "ordinaire"...
bon, je viens d'essayer en ligne de commande :
$ iconv -f UTF-8-MAC -t UTF-8 setup.yaml > setup-utf8.yaml
pas de chance, ça me donne tjs :
MxC3xA9dical
> le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
Tu n'as pas répondu à ma question, probablement parce que tu ne
connaissais pas la réponse. Est-ce que xC3 et xA9 sont censés
représenter des octets, auquel cas xC3xA9 serait le codage
d'un « é » en UTF-8, ou bien sont-ils censés représenter des
caractères, auquel cas xC3 serait un « Ã » et xA9 un « © » ?
Si ça se trouve, Ruby penche pour la première hypothèse et PHP
pour la seconde, ce qui expliquerait qu'ils ne puissent pas
s'entendre.
Que dit la norme YAML ? J'ai essayé de trouver l'info, mais je
n'ai pas réussi à trouver une doc que je sache lire.
> mais bon, je commence à piger ce qui se passe.
>
> en fait "Médical" est une string provenant du carnet d'adresse, je
> suppose qu'elle est en UTF-8 "à la mac OS X" c'est-à-dire quelque chose
> comme :
> "Me'dical", l'accent du é étant placé à côté du e.
Non, ça c'est impossible. Selon qu'on l'interprète comme des numéros
de caractères ou de l'UTF-8, C3 A9 correspond soit aux deux caractères
é, soit au caractère précomposé é. Si c'était un e suivi d'un accent
aigu, ce serait codé soit 65 301, soit 65 CC 81 : rien à voir avec
C3 A9 !
> plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
> comment transcoder en UTF-8 "ordinaire"...
Là, je suis entièrement d'accord. Si j'en crois la philosophie de YAML,
tu *dois* pouvoir obtenir un é lisible directement dans setup.y[a]ml.
>>> Directive Local Value Master Value
>>> yaml.decode_binary 0 0
>> Et ça, tu sais ce que ça veut dire ?
>
> oui :
> yaml.decode_binary boolean
> Off par défaut, si mis à on : permet le décodage des entités binaires
> base64 ayant le tag explicite "tag:yaml.org,2002:binary".
> cf. <http://php.net/manual/fr/yaml.configuration.php>
Ah, d'accord, c'est pour du Base64. Strictement rien à voir avec notre
problème, donc.
> en tout cas, merci bien d'avoir répondu, sans avoir la solution, je sais
> (devine) mieux d'où vient le problème...
Permets-moi d'en douter... (désolé)
> le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
Tu n'as pas répondu à ma question, probablement parce que tu ne
connaissais pas la réponse. Est-ce que xC3 et xA9 sont censés
représenter des octets, auquel cas xC3xA9 serait le codage
d'un « é » en UTF-8, ou bien sont-ils censés représenter des
caractères, auquel cas xC3 serait un « Ã » et xA9 un « © » ?
Si ça se trouve, Ruby penche pour la première hypothèse et PHP
pour la seconde, ce qui expliquerait qu'ils ne puissent pas
s'entendre.
Que dit la norme YAML ? J'ai essayé de trouver l'info, mais je
n'ai pas réussi à trouver une doc que je sache lire.
> mais bon, je commence à piger ce qui se passe.
>
> en fait "Médical" est une string provenant du carnet d'adresse, je
> suppose qu'elle est en UTF-8 "à la mac OS X" c'est-à-dire quelque chose
> comme :
> "Me'dical", l'accent du é étant placé à côté du e.
Non, ça c'est impossible. Selon qu'on l'interprète comme des numéros
de caractères ou de l'UTF-8, C3 A9 correspond soit aux deux caractères
é, soit au caractère précomposé é. Si c'était un e suivi d'un accent
aigu, ce serait codé soit 65 301, soit 65 CC 81 : rien à voir avec
C3 A9 !
> plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
> comment transcoder en UTF-8 "ordinaire"...
Là, je suis entièrement d'accord. Si j'en crois la philosophie de YAML,
tu *dois* pouvoir obtenir un é lisible directement dans setup.y[a]ml.
>>> Directive Local Value Master Value
>>> yaml.decode_binary 0 0
>> Et ça, tu sais ce que ça veut dire ?
>
> oui :
> yaml.decode_binary boolean
> Off par défaut, si mis à on : permet le décodage des entités binaires
> base64 ayant le tag explicite "tag:yaml.org,2002:binary".
> cf. <http://php.net/manual/fr/yaml.configuration.php>
Ah, d'accord, c'est pour du Base64. Strictement rien à voir avec notre
problème, donc.
> en tout cas, merci bien d'avoir répondu, sans avoir la solution, je sais
> (devine) mieux d'où vient le problème...
Permets-moi d'en douter... (désolé)
> le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
Tu n'as pas répondu à ma question, probablement parce que tu ne
connaissais pas la réponse. Est-ce que xC3 et xA9 sont censés
représenter des octets, auquel cas xC3xA9 serait le codage
d'un « é » en UTF-8, ou bien sont-ils censés représenter des
caractères, auquel cas xC3 serait un « Ã » et xA9 un « © » ?
Si ça se trouve, Ruby penche pour la première hypothèse et PHP
pour la seconde, ce qui expliquerait qu'ils ne puissent pas
s'entendre.
Que dit la norme YAML ? J'ai essayé de trouver l'info, mais je
n'ai pas réussi à trouver une doc que je sache lire.
> mais bon, je commence à piger ce qui se passe.
>
> en fait "Médical" est une string provenant du carnet d'adresse, je
> suppose qu'elle est en UTF-8 "à la mac OS X" c'est-à-dire quelque chose
> comme :
> "Me'dical", l'accent du é étant placé à côté du e.
Non, ça c'est impossible. Selon qu'on l'interprète comme des numéros
de caractères ou de l'UTF-8, C3 A9 correspond soit aux deux caractères
é, soit au caractère précomposé é. Si c'était un e suivi d'un accent
aigu, ce serait codé soit 65 301, soit 65 CC 81 : rien à voir avec
C3 A9 !
> plutôt que "bidouiller" côté php, je devrais regarder, côté ruby/yaml
> comment transcoder en UTF-8 "ordinaire"...
Là, je suis entièrement d'accord. Si j'en crois la philosophie de YAML,
tu *dois* pouvoir obtenir un é lisible directement dans setup.y[a]ml.
>>> Directive Local Value Master Value
>>> yaml.decode_binary 0 0
>> Et ça, tu sais ce que ça veut dire ?
>
> oui :
> yaml.decode_binary boolean
> Off par défaut, si mis à on : permet le décodage des entités binaires
> base64 ayant le tag explicite "tag:yaml.org,2002:binary".
> cf. <http://php.net/manual/fr/yaml.configuration.php>
Ah, d'accord, c'est pour du Base64. Strictement rien à voir avec notre
problème, donc.
> en tout cas, merci bien d'avoir répondu, sans avoir la solution, je sais
> (devine) mieux d'où vient le problème...
Permets-moi d'en douter... (désolé)
Mais plutôt que de lancer un outil tel que iconv, tu devrais essayer
d'éditer ton fichier avec un éditeur de texte, y rajouter un simple
« é », et sauver le résultat (en UTF-8 sans BOM) avant de le donner
en pâture à PHP.
Mais plutôt que de lancer un outil tel que iconv, tu devrais essayer
d'éditer ton fichier avec un éditeur de texte, y rajouter un simple
« é », et sauver le résultat (en UTF-8 sans BOM) avant de le donner
en pâture à PHP.
Mais plutôt que de lancer un outil tel que iconv, tu devrais essayer
d'éditer ton fichier avec un éditeur de texte, y rajouter un simple
« é », et sauver le résultat (en UTF-8 sans BOM) avant de le donner
en pâture à PHP.
je viens de vérifier, ça se passe du côté de yaml/ruby.
si je fais un print-out des données avant yaml, c'est bon...
je viens de vérifier, ça se passe du côté de yaml/ruby.
si je fais un print-out des données avant yaml, c'est bon...
je viens de vérifier, ça se passe du côté de yaml/ruby.
si je fais un print-out des données avant yaml, c'est bon...
Mais plutôt que de lancer un outil tel que iconv, tu devrais essayer
d'éditer ton fichier avec un éditeur de texte, y rajouter un simple
« é », et sauver le résultat (en UTF-8 sans BOM) avant de le donner
en pâture à PHP.
Mais plutôt que de lancer un outil tel que iconv, tu devrais essayer
d'éditer ton fichier avec un éditeur de texte, y rajouter un simple
« é », et sauver le résultat (en UTF-8 sans BOM) avant de le donner
en pâture à PHP.
Mais plutôt que de lancer un outil tel que iconv, tu devrais essayer
d'éditer ton fichier avec un éditeur de texte, y rajouter un simple
« é », et sauver le résultat (en UTF-8 sans BOM) avant de le donner
en pâture à PHP.
> le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
Tu n'as pas répondu à ma question, probablement parce que tu ne
connaissais pas la réponse. Est-ce que xC3 et xA9 sont censés
représenter des octets, auquel cas xC3xA9 serait le codage
d'un « é » en UTF-8, ou bien sont-ils censés représenter des
caractères, auquel cas xC3 serait un « Ã » et xA9 un « © » ?
ben en fait comme je sais par ailleurs que ça représente un é, ce sont
deux octets.
Si ça se trouve, Ruby penche pour la première hypothèse et PHP
pour la seconde, ce qui expliquerait qu'ils ne puissent pas
s'entendre.
ouais et, ce qui est encore plus curieux, c'est que la fonction
utf8_decode/php renvoie de l'utf-8 dans ce cas et pas de l'iso 8859-1...
Que dit la norme YAML ? J'ai essayé de trouver l'info, mais je
n'ai pas réussi à trouver une doc que je sache lire.
UTF-8 NO BOM
ou UTF-16 AVEC BOM
> le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
Tu n'as pas répondu à ma question, probablement parce que tu ne
connaissais pas la réponse. Est-ce que xC3 et xA9 sont censés
représenter des octets, auquel cas xC3xA9 serait le codage
d'un « é » en UTF-8, ou bien sont-ils censés représenter des
caractères, auquel cas xC3 serait un « Ã » et xA9 un « © » ?
ben en fait comme je sais par ailleurs que ça représente un é, ce sont
deux octets.
Si ça se trouve, Ruby penche pour la première hypothèse et PHP
pour la seconde, ce qui expliquerait qu'ils ne puissent pas
s'entendre.
ouais et, ce qui est encore plus curieux, c'est que la fonction
utf8_decode/php renvoie de l'utf-8 dans ce cas et pas de l'iso 8859-1...
Que dit la norme YAML ? J'ai essayé de trouver l'info, mais je
n'ai pas réussi à trouver une doc que je sache lire.
UTF-8 NO BOM
ou UTF-16 AVEC BOM
> le é de "Médical" est codé xC3xA9 par le module yaml de ruby.
Tu n'as pas répondu à ma question, probablement parce que tu ne
connaissais pas la réponse. Est-ce que xC3 et xA9 sont censés
représenter des octets, auquel cas xC3xA9 serait le codage
d'un « é » en UTF-8, ou bien sont-ils censés représenter des
caractères, auquel cas xC3 serait un « Ã » et xA9 un « © » ?
ben en fait comme je sais par ailleurs que ça représente un é, ce sont
deux octets.
Si ça se trouve, Ruby penche pour la première hypothèse et PHP
pour la seconde, ce qui expliquerait qu'ils ne puissent pas
s'entendre.
ouais et, ce qui est encore plus curieux, c'est que la fonction
utf8_decode/php renvoie de l'utf-8 dans ce cas et pas de l'iso 8859-1...
Que dit la norme YAML ? J'ai essayé de trouver l'info, mais je
n'ai pas réussi à trouver une doc que je sache lire.
UTF-8 NO BOM
ou UTF-16 AVEC BOM