Почему Perl Text :: Capitalize превращает «Juvénal» в «JuvéNal»? - PullRequest
2 голосов
/ 05 января 2010

Я использую Text :: Capitalize , чтобы попытаться присвоить заголовок некоторым кодированным в UTF-8 именам с веб-страницы (загруженной с помощью WWW :: Mechanize , но я я не получаю ожидаемых результатов.

Например, имя на веб-странице - «KAJELIJELI, Juvénal», но capitalize_title возвращает «Kajelijeli, JuvéNal» (обратите внимание на заглавную N).

Я пробовал use utf8; и изменил \w в регулярном выражении $ word_rule на [:word:], но ни один не изменил вывод с capitalize_title.

Кто-нибудь знает, как я могу заставить его работать?

ТИА

Ответы [ 2 ]

3 голосов
/ 05 января 2010

Просто чтобы заметить: use utf8 просто говорит Perl, что вы использовали Unicode (широкие) символы в вашем источнике. Больше ничего не делает. Однако с любыми данными, которые вы извлекаете из других источников, вы должны быть уверены, что они закодированы в UTF-8, и что вы указываете всем адресатам вывода, что они должны ожидать UTF-8.

Когда что-то не так с вашими строками UTF-8, есть много мест, где это могло бы пойти не так, поэтому начните проверять спереди назад, чтобы убедиться, что это UTF-8 на протяжении всего процесса. Это может означать выяснение того, как перевести Latin-1, который вы можете получить с веб-страницы, в UTF-8. Encode и Encode :: FixLatin полезны. Советы Juerd's Perl Unicode тоже очень полезны.

Моя последняя книга, Эффективное программирование на Perl, 2-е издание , посвятит целую главу этим вопросам. Из-за всех этих проблем писать не особенно забавную главу, но как только вы разберетесь со всеми частями, это станет намного более понятным. Тем не менее, выход в марте не поможет вам сегодня. (

3 голосов
/ 05 января 2010

Вы, должно быть, забыли установить двоичный режим для вашего ввода на utf8, потому что модуль работает нормально.

Пример:

#!perl
use warnings;
use strict;
use Text::Capitalize;
use utf8;
my $test = "KAJELIJELI, Juvénal";
binmode STDOUT, "utf8";
print capitalize_title ($test);

печать

Kajelijeli, Juvénal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...