Maintenant, si j'utilise seulement
use open OUT => ':locale';
alors j'ai le même résultat qu'avec -C (c'est cohérent). La solution
pour obtenir un "à" correctement encodé est d'utiliser les deux:
use encoding ':locale';
use open OUT => ':locale';
mais aucune idée du pourquoi...
Tout ceci est testé avec perl 5.8.7 sous Debian.
Maintenant, si j'utilise seulement
use open OUT => ':locale';
alors j'ai le même résultat qu'avec -C (c'est cohérent). La solution
pour obtenir un "à" correctement encodé est d'utiliser les deux:
use encoding ':locale';
use open OUT => ':locale';
mais aucune idée du pourquoi...
Tout ceci est testé avec perl 5.8.7 sous Debian.
Maintenant, si j'utilise seulement
use open OUT => ':locale';
alors j'ai le même résultat qu'avec -C (c'est cohérent). La solution
pour obtenir un "à" correctement encodé est d'utiliser les deux:
use encoding ':locale';
use open OUT => ':locale';
mais aucune idée du pourquoi...
Tout ceci est testé avec perl 5.8.7 sous Debian.
La directive encoding fait comme la directive utf8, mais pour d'autres
encodages. C'est une mauvaise idée : pas de problèmes de compatibilité
ici.
Elle autorise d'utiliser :locale, ce qui est encore plus mauvais
(l'encodage d'un code source ne change pas au gré d'une variable
d'environnement).
Elle change au passage l'encodage de STDIN et STDOUT, ce qui peut se
faire autrement. Je recommande de ne pas l'utiliser.
Finalement, ce que je recommande :
* « use utf8 » et sauver le script en UTF-8.
* binmode ..., ":encoding(...)" ou open ..., "...:encoding(...)".
* langinfo CODESET pour déterminer l'encodage
La directive encoding fait comme la directive utf8, mais pour d'autres
encodages. C'est une mauvaise idée : pas de problèmes de compatibilité
ici.
Elle autorise d'utiliser :locale, ce qui est encore plus mauvais
(l'encodage d'un code source ne change pas au gré d'une variable
d'environnement).
Elle change au passage l'encodage de STDIN et STDOUT, ce qui peut se
faire autrement. Je recommande de ne pas l'utiliser.
Finalement, ce que je recommande :
* « use utf8 » et sauver le script en UTF-8.
* binmode ..., ":encoding(...)" ou open ..., "...:encoding(...)".
* langinfo CODESET pour déterminer l'encodage
La directive encoding fait comme la directive utf8, mais pour d'autres
encodages. C'est une mauvaise idée : pas de problèmes de compatibilité
ici.
Elle autorise d'utiliser :locale, ce qui est encore plus mauvais
(l'encodage d'un code source ne change pas au gré d'une variable
d'environnement).
Elle change au passage l'encodage de STDIN et STDOUT, ce qui peut se
faire autrement. Je recommande de ne pas l'utiliser.
Finalement, ce que je recommande :
* « use utf8 » et sauver le script en UTF-8.
* binmode ..., ":encoding(...)" ou open ..., "...:encoding(...)".
* langinfo CODESET pour déterminer l'encodage
Pourquoi une mauvaise idée?
Comme mon source est en ASCII, je ne vais pas l'utiliser. En fait,
j'ai des commentaires en ISO-8859-1, ce qui convient mieux à ma
config (j'attends le jour où "less" sera capable de reconnaître
l'encodage comme Emacs...).
OK. Mais après les modif, je me prends un segmentation fault à cause
d'une récursion infinie au niveau du "warn"! Je viens de faire un
rapport de bug sur le BTS de Debian. Donc pour le moment, ce n'est
pas la bonne solution.
Pourquoi une mauvaise idée?
Comme mon source est en ASCII, je ne vais pas l'utiliser. En fait,
j'ai des commentaires en ISO-8859-1, ce qui convient mieux à ma
config (j'attends le jour où "less" sera capable de reconnaître
l'encodage comme Emacs...).
OK. Mais après les modif, je me prends un segmentation fault à cause
d'une récursion infinie au niveau du "warn"! Je viens de faire un
rapport de bug sur le BTS de Debian. Donc pour le moment, ce n'est
pas la bonne solution.
Pourquoi une mauvaise idée?
Comme mon source est en ASCII, je ne vais pas l'utiliser. En fait,
j'ai des commentaires en ISO-8859-1, ce qui convient mieux à ma
config (j'attends le jour où "less" sera capable de reconnaître
l'encodage comme Emacs...).
OK. Mais après les modif, je me prends un segmentation fault à cause
d'une récursion infinie au niveau du "warn"! Je viens de faire un
rapport de bug sur le BTS de Debian. Donc pour le moment, ce n'est
pas la bonne solution.
Vincent Lefevre wrote in message
<20051218010915$:Pourquoi une mauvaise idée?
Au niveau fonctionnalité, UTF-8 remplace avantageusement à peu près tous les
encodages nationaux. Au niveau programmation, il est plus facile de gérer
UTF-8 que de gérer toute la variété des encodages : il serait donc
souhaitable que les encodages nationaux disparaissent le plus vite possible
pour que les programmes au contact de texte puissent être simplifiés autant
que possible.
Personnellement, j'utilise de moins en moins less comme pager, et de
plus en plus vim.
C'est bizarre : j'utilise quotidiennement des scripts qui utilise cette
construction, sans problème. Tu as un exemple complet minimal ?
Vincent Lefevre wrote in message
<20051218010915$00dd@prunille.vinc17.org>:
Pourquoi une mauvaise idée?
Au niveau fonctionnalité, UTF-8 remplace avantageusement à peu près tous les
encodages nationaux. Au niveau programmation, il est plus facile de gérer
UTF-8 que de gérer toute la variété des encodages : il serait donc
souhaitable que les encodages nationaux disparaissent le plus vite possible
pour que les programmes au contact de texte puissent être simplifiés autant
que possible.
Personnellement, j'utilise de moins en moins less comme pager, et de
plus en plus vim.
C'est bizarre : j'utilise quotidiennement des scripts qui utilise cette
construction, sans problème. Tu as un exemple complet minimal ?
Vincent Lefevre wrote in message
<20051218010915$:Pourquoi une mauvaise idée?
Au niveau fonctionnalité, UTF-8 remplace avantageusement à peu près tous les
encodages nationaux. Au niveau programmation, il est plus facile de gérer
UTF-8 que de gérer toute la variété des encodages : il serait donc
souhaitable que les encodages nationaux disparaissent le plus vite possible
pour que les programmes au contact de texte puissent être simplifiés autant
que possible.
Personnellement, j'utilise de moins en moins less comme pager, et de
plus en plus vim.
C'est bizarre : j'utilise quotidiennement des scripts qui utilise cette
construction, sans problème. Tu as un exemple complet minimal ?
Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
Ça n'a pas l'air de bien marcher:
$ PAGER=vim man vim
binmode STDERR, ":encoding($encoding)";
Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
Ça n'a pas l'air de bien marcher:
$ PAGER=vim man vim
binmode STDERR, ":encoding($encoding)";
Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
Ça n'a pas l'air de bien marcher:
$ PAGER=vim man vim
binmode STDERR, ":encoding($encoding)";
Vincent Lefevre wrote in message
<20051218105429$:Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
C'est pourquoi il faut autant que possible gérer les encodages quand on
dialogue avec l'extérieur. Mais quand on n'a pas cette contrainte, ce qui
est précisément le cas ici, il ne faut surtout pas utiliser autre chose
qu'UTF-8.
Ça n'a pas l'air de bien marcher:
$ PAGER=vim man vim
PAGER="vim -"
Mais ça ne gère pas les séquences d'échappement utilisées par man.
Ceci dit, man adapte son encodage de sortie à la locale, donc ce
n'est pas un problème ici.
binmode STDERR, ":encoding($encoding)";
En n'encodant pas STDERR (ce qui est raisonnable : STDERR est le dernier
recours, il ne faut donc pas la surcharger ; d'ailleurs les modules
standards de perl n'encodent jamais STDERR) ça marche.
Vincent Lefevre wrote in message
<20051218105429$0789@prunille.vinc17.org>:
Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
C'est pourquoi il faut autant que possible gérer les encodages quand on
dialogue avec l'extérieur. Mais quand on n'a pas cette contrainte, ce qui
est précisément le cas ici, il ne faut surtout pas utiliser autre chose
qu'UTF-8.
Ça n'a pas l'air de bien marcher:
$ PAGER=vim man vim
PAGER="vim -"
Mais ça ne gère pas les séquences d'échappement utilisées par man.
Ceci dit, man adapte son encodage de sortie à la locale, donc ce
n'est pas un problème ici.
binmode STDERR, ":encoding($encoding)";
En n'encodant pas STDERR (ce qui est raisonnable : STDERR est le dernier
recours, il ne faut donc pas la surcharger ; d'ailleurs les modules
standards de perl n'encodent jamais STDERR) ça marche.
Vincent Lefevre wrote in message
<20051218105429$:Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
C'est pourquoi il faut autant que possible gérer les encodages quand on
dialogue avec l'extérieur. Mais quand on n'a pas cette contrainte, ce qui
est précisément le cas ici, il ne faut surtout pas utiliser autre chose
qu'UTF-8.
Ça n'a pas l'air de bien marcher:
$ PAGER=vim man vim
PAGER="vim -"
Mais ça ne gère pas les séquences d'échappement utilisées par man.
Ceci dit, man adapte son encodage de sortie à la locale, donc ce
n'est pas un problème ici.
binmode STDERR, ":encoding($encoding)";
En n'encodant pas STDERR (ce qui est raisonnable : STDERR est le dernier
recours, il ne faut donc pas la surcharger ; d'ailleurs les modules
standards de perl n'encodent jamais STDERR) ça marche.
Si, justement ici j'ai cette contrainte: il faut sortir les messages
dans l'encodage utilisé par le terminal, i.e. celui indiqué par les
locales.
Mais ça ne gère pas les séquences d'échappement utilisées par man.
Ici ça donne un truc illisible:
Évidemment qu'il faut encoder STDERR. Mais les modules n'ont
probablement pas besoin de le faire, car ils sortent tout en
anglais.
Si, justement ici j'ai cette contrainte: il faut sortir les messages
dans l'encodage utilisé par le terminal, i.e. celui indiqué par les
locales.
Mais ça ne gère pas les séquences d'échappement utilisées par man.
Ici ça donne un truc illisible:
Évidemment qu'il faut encoder STDERR. Mais les modules n'ont
probablement pas besoin de le faire, car ils sortent tout en
anglais.
Si, justement ici j'ai cette contrainte: il faut sortir les messages
dans l'encodage utilisé par le terminal, i.e. celui indiqué par les
locales.
Mais ça ne gère pas les séquences d'échappement utilisées par man.
Ici ça donne un truc illisible:
Évidemment qu'il faut encoder STDERR. Mais les modules n'ont
probablement pas besoin de le faire, car ils sortent tout en
anglais.
Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
Le problème actuel est que tous les logiciels ne supportent pas encore
UTF-8 (car multi-byte).
Un des gros problèmes d'UTF-8 n'est-il pas la taille variable en octet
des caractères, qui doit terriblement ralentir les opérations
d'extraction de sous-chaîne sur position ?
Un des gros problèmes d'UTF-8 n'est-il pas la taille variable en octet
des caractères, qui doit terriblement ralentir les opérations
d'extraction de sous-chaîne sur position ?
Un des gros problèmes d'UTF-8 n'est-il pas la taille variable en octet
des caractères, qui doit terriblement ralentir les opérations
d'extraction de sous-chaîne sur position ?
Vincent Lefevre wrote in message
<20051218183459$:Si, justement ici j'ai cette contrainte: il faut sortir les messages
dans l'encodage utilisé par le terminal, i.e. celui indiqué par les
locales.
Il était question de l'encodage du script lui-même, pas de l'encodage des
messages qu'il affiche. Ces deux notions sont tout à fait indépendantes,
justement.
Évidemment qu'il faut encoder STDERR. Mais les modules n'ont
probablement pas besoin de le faire, car ils sortent tout en
anglais.
Ce qui est une très bonne chose : la traduction des messages
d'erreur est une connerie qui cause des pertes de temps sans fin sur
les groupes de discussion d'entraide.
Il ne faut pas encoder STDERR, et il faut faire attention à la
garder en ASCII, de manière à ce que les informations données soient
lisibles au maximum en toutes circonstances, même quand la moitié de
l'installation est cassée.
Vincent Lefevre wrote in message
<20051218183459$7879@prunille.vinc17.org>:
Si, justement ici j'ai cette contrainte: il faut sortir les messages
dans l'encodage utilisé par le terminal, i.e. celui indiqué par les
locales.
Il était question de l'encodage du script lui-même, pas de l'encodage des
messages qu'il affiche. Ces deux notions sont tout à fait indépendantes,
justement.
Évidemment qu'il faut encoder STDERR. Mais les modules n'ont
probablement pas besoin de le faire, car ils sortent tout en
anglais.
Ce qui est une très bonne chose : la traduction des messages
d'erreur est une connerie qui cause des pertes de temps sans fin sur
les groupes de discussion d'entraide.
Il ne faut pas encoder STDERR, et il faut faire attention à la
garder en ASCII, de manière à ce que les informations données soient
lisibles au maximum en toutes circonstances, même quand la moitié de
l'installation est cassée.
Vincent Lefevre wrote in message
<20051218183459$:Si, justement ici j'ai cette contrainte: il faut sortir les messages
dans l'encodage utilisé par le terminal, i.e. celui indiqué par les
locales.
Il était question de l'encodage du script lui-même, pas de l'encodage des
messages qu'il affiche. Ces deux notions sont tout à fait indépendantes,
justement.
Évidemment qu'il faut encoder STDERR. Mais les modules n'ont
probablement pas besoin de le faire, car ils sortent tout en
anglais.
Ce qui est une très bonne chose : la traduction des messages
d'erreur est une connerie qui cause des pertes de temps sans fin sur
les groupes de discussion d'entraide.
Il ne faut pas encoder STDERR, et il faut faire attention à la
garder en ASCII, de manière à ce que les informations données soient
lisibles au maximum en toutes circonstances, même quand la moitié de
l'installation est cassée.