我正在使用Text::Capitalize来尝试从网页中标记一些UTF-8编码的名称(使用WWW::Mechanize下载),但我没有得到我期望的结果。< / p>
例如,网页上的名称是“KAJELIJELI,Juvénal”,但capitalize_title
返回“Kajelijeli,JuvéNal”(注意大写的N)。
我已尝试use utf8;
并将$ word_rule正则表达式中的\w
更改为[:word:]
但未更改capitalize_title
的输出。
有谁知道我怎么能让它发挥作用?
TIA
答案 0 :(得分:3)
您一定忘记将输入的二进制模式设置为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
答案 1 :(得分:3)
请注意:use utf8
只是告诉Perl你在源代码中使用了Unicode(宽)字符。它没有做任何其他事情。但是,对于从其他地方获取的任何数据,您必须确保它是UTF-8编码的,并且您告诉任何输出目标它们应该期望UTF-8。
当您的UTF-8字符串出现问题时,有很多地方可能出错,因此请在前后开始检查以确保整个过程中的UTF-8。这可能意味着要弄清楚如何将您从网页上获得的Latin-1翻译成UTF-8。 Encode和Encode::FixLatin很有用。 Juerd's Perl Unicode Advice也很有帮助。
我的最新着作Effective Perl Programming, 2nd Edition,将这一问题用了整整一章。由于所有这些问题,写起来并不是一个特别有趣的章节,但是一旦你把所有的部分都弄好了,它就会更有意义。但是,它在3月份发布并不会对你有所帮助。 :(