2

我正在使用Text::Capitalize来尝试从网页(使用WWW::Mechanize下载的一些 UTF-8 编码名称)标题大小写,但我没有得到我期望的结果。

例如,网页上的名称是“KAJELIJELI,Juvénal”,但capitalize_title返回“Kajelijeli,JuvéNal”(注意大写 N)。

我已经尝试use utf8;\w$word_rule 正则表达式中的 's更改为,[:word:]但都没有更改capitalize_title.

有谁知道我怎样才能使它工作?

TIA

4

2 回答 2

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,尤文纳尔
于 2010-01-05T05:08:16.637 回答
3

请注意:use utf8仅告诉 Perl 您在源代码中使用了 Unicode(宽)字符。它不做任何其他事情。但是,对于您从其他地方获取的任何数据,您必须确保它是 UTF-8 编码的,并且您告诉任何输出目的地它们应该期待 UTF-8。

当您的 UTF-8 字符串出现问题时,有很多地方可能会出错,因此开始从前到后检查以确保它在整个过程中都是 UTF-8。这可能意味着要弄清楚如何将您可能从网页获得的 Latin-1 翻译成 UTF-8。EncodeEncode::FixLatin很有用。Juerd 的 Perl Unicode Advice也很有帮助。

我的最新著作《Effective Perl Programming, 2nd Edition》用一整章的篇幅来讨论这些问题。由于所有这些问题,这并不是一个特别有趣的章节,但是一旦你把所有的部分都弄清楚了,它就会变得更有意义。但是,它在 3 月发布今天不会对您有所帮助。:(

于 2010-01-05T11:12:48.977 回答