3 votes

Compresseur de tweets basé sur Unicode en Perl

Je veux mettre en place ma propre compresseur de gazouillis . En gros, cela permet de faire ce qui suit. Cependant, je suis bloqué par certains problèmes d'unicode.

Voici mon script :

#!/usr/bin/env perl
use warnings;
use strict;

print tweet_compress('cc ms ns ps in ls fi fl ffl ffi iv ix vi oy ii xi nj/, "\. " ,", "'),"\n";

sub tweet_compress {
    my $tweet = shift;
    $tweet =~ s/\. ?$//;
    my @orig = ( qw/cc ms ns ps in ls fi fl ffl ffi iv ix vi oy ii xi nj/, ". " ,", ");
    my @new = qw/       fl           /;
    $tweet =~ s/$orig[$_]/$new[$_]/g for 0 .. $#orig;
    return $tweet;
}

Mais ça imprime de la merde au terminal :

???????f?f???????/"\,""

Qu'est-ce que je fais de mal ?

6voto

deepakg Points 415

Deux questions.

Premièrement, vous avez des caractères unicode dans votre code source. Assurez-vous de sauvegarder votre fichier en utf8. et utiliser le pragma use utf8.

De plus, si vous avez l'intention d'exécuter ce programme à partir d'une console, assurez-vous qu'elle peut gérer l'unicode. L'invite de commande de Windows ne le peut pas et affichera toujours ? que vos données soient correctes ou non. J'ai exécuté ce programme sur Mac OS avec un Terminal configuré pour gérer l'utf8.

Deuxièmement, si vous avez "." dans votre liste d'origine, il sera interprété comme "tout caractère unique" et vous donnera des résultats erronés - vous devez donc l'échapper avant de l'utiliser dans votre expression régulière. J'ai modifié un peu le programme pour que cela fonctionne.

#!/usr/bin/env perl
use warnings;
use strict;
use utf8; #use character semantics

#make sure the data is re-encoded to utf8 when output to terminal
binmode STDOUT, ':utf8';

print tweet_compress('cc ms ns ps in ls fi fl ffl ffi iv ix vi oy ii xi nj/, "\. " ,", "'),"\n";

sub tweet_compress {
    my $tweet = shift;
    $tweet =~ s/\. ?$//;
    my @orig = ( qw/cc ms ns ps in ls fi fl ffl ffi iv ix vi oy ii xi nj/, '\. ' ,", ");
    my @new = qw/㏄ ㎳ ㎱ ㎰ ㏌ ʪ fi fl ffl ffi ⅳ ⅸ ⅵ ѹ ⅱ ⅺ nj . ,/;
    $tweet =~ s/$orig[$_]/$new[$_]/g for 0 .. $#orig;
    return $tweet;
}

1voto

Pedro Silva Points 3770

Dites-le à perl vous êtes utilisation de caractères unicode dans votre script avec use utf8 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X