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

Conversion UNICODE vers ASCII

12 réponses
Avatar
Yoann Wyffels
Bonjour,

Comment convertir un fichier texte encodé en UNICODE vers de l'ASCII pour le
lire/traiter correctement dans un script Perl ?
J'ai regardé la doc, la fonction pack() je n'y comprends rien (et pourtant
je m'acharne !), j'ai regardé aussi du côté des modules sur cpan, rien de
concluant.

La fonction open() me dit que je peux mettre des filtres de lecture, mais
cela me retourne une jolie erreur quand je tente par exemple de faire un
open(file,":utf8","monfichier.txt");


++
Yoann

10 réponses

1 2
Avatar
Jacques Caron
Salut,

On Wed, 13 Jul 2005 15:20:45 +0200, Yoann Wyffels
wrote:

Comment convertir un fichier texte encodé en UNICODE


Unicode c'est large... UTF-8, UCS-2, UCS-4? Pour les deux derniers, avec
des octets dans quel ordre?

vers de l'ASCII pour le lire/traiter correctement dans un script Perl ?


Perl 5.8 gère parfaitement Unicode en natif, à condition qu'il soit au
courant que ce qu'on lui donne en est, et à quel format il est.

La fonction open() me dit que je peux mettre des filtres de lecture, mais
cela me retourne une jolie erreur quand je tente par exemple de faire un
open(file,":utf8","monfichier.txt");


Avec "<:utf8" ça devrait nettement mieux marcher, si le fichier est bien
en UTF-8 bien sûr.

Jacques.

Avatar
Yoann Wyffels
C'est vrai j'ai manqué de précision. Je suis sour Perl 5.6 (ActiveState),
Windows.
.

Comment convertir un fichier texte encodé en UNICODE


Unicode c'est large... UTF-8, UCS-2, UCS-4? Pour les deux derniers, avec
des octets dans quel ordre?


C'est de l'UTF-8 que je cherche à transformer en ASCII

vers de l'ASCII pour le lire/traiter correctement dans un script Perl ?


Perl 5.8 gère parfaitement Unicode en natif, à condition qu'il soit au
courant que ce qu'on lui donne en est, et à quel format il est.

La fonction open() me dit que je peux mettre des filtres de lecture, mais
cela me retourne une jolie erreur quand je tente par exemple de faire un
open(file,":utf8","monfichier.txt");


Avec "<:utf8" ça devrait nettement mieux marcher, si le fichier est bien
en UTF-8 bien sûr.


J'ai déjà essayé cette syntaxe, idem, Perl me dit qu'il ne connaît pas de
mode (Unknown open() mode '<:utf8')
avec le code suivant:
-------------------------------------------------
open(FILE,"<:utf8","export_incident.txt");
while(<FILE>){
print "$_n";
}
close(FILE);
-------------------------------------------------

Jacques.



Avatar
Paul Gaborit
À (at) Wed, 13 Jul 2005 15:45:37 +0200,
"Jacques Caron" écrivait (wrote):
On Wed, 13 Jul 2005 15:20:45 +0200, Yoann Wyffels
wrote:
[...]

La fonction open() me dit que je peux mettre des filtres de lecture, mais
cela me retourne une jolie erreur quand je tente par exemple de faire un
open(file,":utf8","monfichier.txt");


Avec "<:utf8" ça devrait nettement mieux marcher, si le fichier est
bien en UTF-8 bien sûr.


Et pour le PO (Posteur Original), plutôt que de nous donner votre avis
sur les qualités esthétiques d'une erreur (jolie erreur !), recopiez
donc le message d'erreur exact... Ça aide à aider ! Et ça peut au
passage vous amenez à relire la doc car souvent le message est assez
explicite. L'utilisation de 'use diagnostics' peut aussi aider.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/&gt;
Perl en français - <http://perl.enstimac.fr/&gt;


Avatar
Stephane Zuckerman
C'est vrai j'ai manqué de précision. Je suis sour Perl 5.6 (ActiveState),
Windows.
Unicode c'est large... UTF-8, UCS-2, UCS-4? Pour les deux derniers, avec
des octets dans quel ordre?


C'est de l'UTF-8 que je cherche à transformer en ASCII

Perl 5.8 gère parfaitement Unicode en natif, à condition qu'il soit au
courant que ce qu'on lui donne en est, et à quel format il est.



Et c'est sans doute là qu'est votre problème (plus bas) : vous utilisez
Perl 5.6 :-)

J'ai déjà essayé cette syntaxe, idem, Perl me dit qu'il ne connaît pas de
mode (Unknown open() mode '<:utf8')
avec le code suivant:
-------------------------------------------------
open(FILE,"<:utf8","export_incident.txt");
while(<FILE>){
print "$_n";
}
close(FILE);
-------------------------------------------------


--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)


Avatar
Michel Rodriguez
Yoann Wyffels wrote:

Comment convertir un fichier texte encodé en UNICODE vers de l'ASCII pour le
lire/traiter correctement dans un script Perl ?


On ne peut pas. L'ASCII a un jeu de 127 characteres, et l'unicode couvre
quelques millions...

Maintenant si ton probleme est de convertir du texte en UTF-8 ne
contenant que des characteres accentues francais vers de l'ISO-8859-1
(ou -15), alors en 5.6.* tu peux utiliser Text::Iconv (si tu as iconv)
installe, ou Unicode::Map8 et Unicode::Strings (de memoire).

--
mirod

Avatar
Paul Gaborit
À (at) Wed, 13 Jul 2005 16:10:56 +0200,
"Yoann Wyffels" écrivait (wrote):
La fonction open() me dit que je peux mettre des filtres de lecture, mais
cela me retourne une jolie erreur quand je tente par exemple de faire un
open(file,":utf8","monfichier.txt");


Avec "<:utf8" ça devrait nettement mieux marcher, si le fichier est bien
en UTF-8 bien sûr.


J'ai déjà essayé cette syntaxe, idem, Perl me dit qu'il ne connaît pas de
mode (Unknown open() mode '<:utf8')


Il vaut mieux lire la documentation liée à la distribution qu'on
utilise ! Utilisez donc le script 'perldoc' fourni :

perldoc -f open

Et là, nulle mention d'un éventuel filtre ':utf8'... Votre
distribution est trop ancienne.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/&gt;
Perl en français - <http://perl.enstimac.fr/&gt;



Avatar
Yoann Wyffels
"Paul Gaborit" a écrit dans le message de
news:

À (at) Wed, 13 Jul 2005 15:45:37 +0200,
"Jacques Caron" écrivait (wrote):
On Wed, 13 Jul 2005 15:20:45 +0200, Yoann Wyffels
wrote:
[...]

La fonction open() me dit que je peux mettre des filtres de lecture,
mais
cela me retourne une jolie erreur quand je tente par exemple de faire un
open(file,":utf8","monfichier.txt");


Avec "<:utf8" ça devrait nettement mieux marcher, si le fichier est
bien en UTF-8 bien sûr.


Et pour le PO (Posteur Original), plutôt que de nous donner votre avis
sur les qualités esthétiques d'une erreur (jolie erreur !), recopiez
donc le message d'erreur exact... Ça aide à aider ! Et ça peut au
passage vous amenez à relire la doc car souvent le message est assez
explicite. L'utilisation de 'use diagnostics' peut aussi aider.



Bonjour Paul,

C'est que ce que j'ai fait par la suite, en disant qu'effectivement,je
n'avais pas été précis sur ce coup là...:)



--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/&gt;
Perl en français - <http://perl.enstimac.fr/&gt;




Avatar
Yoann Wyffels
"Michel Rodriguez" a écrit dans le message de news:
42d523c9$0$320$
Yoann Wyffels wrote:

Comment convertir un fichier texte encodé en UNICODE vers de l'ASCII pour
le lire/traiter correctement dans un script Perl ?


On ne peut pas. L'ASCII a un jeu de 127 characteres, et l'unicode couvre
quelques millions...

Maintenant si ton probleme est de convertir du texte en UTF-8 ne contenant
que des characteres accentues francais vers de l'ISO-8859-1 (ou -15),
alors en 5.6.* tu peux utiliser Text::Iconv (si tu as iconv) installe, ou
Unicode::Map8 et Unicode::Strings (de memoire).

--
mirod


Merci Michel pour ta réponse constructive, je vais essayé tout ça. Je dois
t'avouer être un peu perdu dans le monde des jeux de caractères, merci de
m'avoir aiguiller sur les bons termes.


Avatar
Jacques Caron
Salut,

On Wed, 13 Jul 2005 16:10:56 +0200, Yoann Wyffels
wrote:

C'est de l'UTF-8 que je cherche à transformer en ASCII


En ASCII strict il manque tout un tas de caractères qui sont présents dans
votre texte UTF-8 (sinon UTF-8 == ASCII pour tous les caractères ASCII).

Ce que vous cherchez c'est soit à manipuler de l'UTF-8 avec perl, soit à
convertir l'UTF-8 dans un charset 8 bits comme ISO-8859-1 (aka ISO Latin
1).

La meilleure solution est probablement d'utiliser perl 5.8, mais à défaut
vous pouvez regarder du côté de Unicode::MapUTF8.

Jacques.

Avatar
Yoann Wyffels
"Michel Rodriguez" a écrit dans le message de news:
42d523c9$0$320$
Yoann Wyffels wrote:

Comment convertir un fichier texte encodé en UNICODE vers de l'ASCII pour
le lire/traiter correctement dans un script Perl ?


On ne peut pas. L'ASCII a un jeu de 127 characteres, et l'unicode couvre
quelques millions...

Maintenant si ton probleme est de convertir du texte en UTF-8 ne contenant
que des characteres accentues francais vers de l'ISO-8859-1 (ou -15),
alors en 5.6.* tu peux utiliser Text::Iconv (si tu as iconv) installe, ou
Unicode::Map8 et Unicode::Strings (de memoire).

--
mirod


Bout de code qui fonctionne:
------------------------------------------
use Unicode::String qw(latin1 utf16);

open(FILE,"export_incident.txt");
while(<FILE>){
$test.=utf16($_);
}
close(FILE);

$test=latin1($test);
------------------------------------------
Pour info, le fichier export_incident.txt provient de l'outil d'extraction
fourni avec SQL Server.

Encore merci Michel pour ton aide.


1 2