|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Dmitry E. Oboukhov 2:5020/830.100 26 Jan 2008 22:41:16 To : All Subject : и снова о юникоде --------------------------------------------------------------------------------
символы в кодировке koi8r и такого вида конструкции:
а страница
доступна
только для
скрипт работает в локали utf-8.
если контенту сделать такое преобразование:
use Encode qw(encode decode);
...
$charset='koi8-r';
...
$content=encode('utf-8', decode($charset, $content, Encode::FB_QUIET));
и вывести его на экран, то на экране видим русские буквы в местах где
был текст в koi8, и стра в местах где был этот
закодированный юникод.
теперь я следом делаю:
$content=~s/\&\#(\d{4})\;/pack 'U', $1/eg;
и получаю такой результат:
все закодированные в коды строки стали нормально видны по русски,
а все русские строки до этого показывавшиеся корректно превратились во
вражескую кабалистику (хотя их регулярное выражение затронуть не должно
было)
вот тестовый скрипт демонстрирующий эффект:
nbw:[~/bite]$ cat test.pl
#!/usr/bin/perl
use warnings;
use strict;
my $str=<<endstring;
а страница
доступна
только для
это тестовая строка в юникоде
endstring
print "=" x 50, "\n";
print $str, "\n";
print "=" x 50, "\n";
$str=~s/\&\#(\d{4})\;/pack 'U', $1/eg;
print $str, "\n";
а вот результаты его работы:
nbw:[~/bite]$ perl test.pl
==================================================
а страница
доступна
только для
это тестовая строка в юникоде
==================================================
Wide character in print at test.pl line 19.
а страница
доступна
только для
надеюсь через двойной гейт пройдет в удобоваримой форме то что приведено
выше :)
что я делаю неправильно?
... Выборы, выборы! Все кандидаты ...ры! (ц) Ленинград
--- Mutt/1.5.17 (2007-12-11)
* Origin: Debian GNU Linux (2:5020/830.100)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/446166eeffa3.html, оценка из 5, голосов 10
|