«Твиттер компрессор» на основе Unicode в Perl - PullRequest
3 голосов
/ 20 июля 2010

Я хочу реализовать свой собственный твит-компрессор .В основном это делает следующее.Однако я застрял с некоторыми проблемами с Unicode.

Вот мой сценарий:

#!/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/㏄ ㎳ ㎱ ㎰ ㏌ ʪ fi fl ffl ffi ⅳ ⅸ ⅵ ѹ ⅱ ⅺ nj . ,/;
    $tweet =~ s/$orig[$_]/$new[$_]/g for 0 .. $#orig;
    return $tweet;
}

Но это выводит мусор на терминал:

?.?.?.?.?.?.?.f.?.f?.?.?.?.?.?.?.nj/."\..,"."

я делаю не так?

Ответы [ 2 ]

6 голосов
/ 20 июля 2010

Два вопроса.

Во-первых, в вашем исходном коде есть символы юникода.Убедитесь, что вы сохранили свой файл как utf8 и , используя прагму utf8.

Также, если вы собираетесь запускать эту программу из консоли, убедитесь, что она может обрабатывать Unicode.Командная строка Windows не может и всегда будет отображаться?независимо от того, правильны ли ваши данные или нет.Я запустил это в Mac OS с терминалом, настроенным для обработки utf8.

Во-вторых, если у вас есть "."в вашем исходном списке он будет интерпретирован как «любой отдельный символ» и даст вам неправильные результаты - поэтому вам нужно избегать его, прежде чем использовать его в своем регулярном выражении.Я немного изменил программу, чтобы она заработала.

#!/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;
}
1 голос
/ 20 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...