2

Text::Capitalizeを使用して、Web ページ ( WWW::Mechanizeを使用してダウンロードしたもの) からいくつかの UTF-8 でエンコードされた名前の大文字と小文字を区別しようとしていますが、期待した結果が得られません。

たとえば、Web ページ上の名前は「KAJELIJELI, Juvénal」ですが、「Kajelijeli, JuvéNal」をcapitalize_title返します (大文字の N に注意してください)。

$word_rule regex の を にuse utf8;変更しようとしましたが、どちらも からの出力を変更しませんでした。\w[:word:]capitalize_title

誰も私がそれを機能させる方法を知っていますか?

ティア

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);

版画

カジェリジェリ、ジュベナル
于 2010-01-05T05:08:16.637 に答える
3

注意:use utf8ソースで Unicode (ワイド) 文字を使用したことを Perl に伝えるだけです。他には何もしません。ただし、他の場所からフェッチするデータでは、それが UTF-8 でエンコードされていることを確認し、出力先に UTF-8 を期待する必要があることを伝える必要があります。

UTF-8 文字列に問題が発生した場合、問題が発生した可能性のある場所が多数あるため、最初から最後までチェックして、プロセス全体で UTF-8 であることを確認してください。それは、Web ページから得た Latin-1 を UTF-8 に変換する方法を考え出すことを意味するかもしれません。EncodeEncode::FixLatinは便利です。Juerd の Perl Unicode Adviceも非常に役に立ちます。

私の最新の本、Effective Perl Programming, 2nd Editionでは、これらの問題に章全体を割いています。これらすべての問題のために、書くのは特に楽しい章ではありませんでしたが、すべての部分をまっすぐに理解すると、はるかに理にかなっています. ただし、3 月に公開されるので、今日は役に立ちません。:(

于 2010-01-05T11:12:48.977 に答える