2010-01-05 29 views
2

我使用Text::Capitalize嘗試和標題的情況下從網頁(使用WWW::Mechanize下載了一些UTF-8編碼的名字,但我沒有得到結果我很期待。爲什麼Perl的Text :: Capitalize將「Juvénal」變成了「JuvéNal」?

例如,名字網頁是「卡耶里耶裏,朱韋納爾」但capitalize_title回報「卡耶里耶裏,朱韋納爾」(注意大寫N)。

我已經試過use utf8;和改變$ word_rule正則表達式\w年代到[:word:]但既不改變從capitalize_title輸出。

有誰知道我可以如何使它工作?

TIA

回答

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 
3

只是要注意:use utf8只是告訴Perl你已經在你的源採用的是Unicode(寬)字符。它什麼都不做。但是,對於從別處獲取的任何數據,您必須確定它是UTF-8編碼的,並且您告訴任何輸出目標它們應該使用UTF-8。

當你的UTF-8字符串出現問題時,有很多地方可能出錯,所以在整個過程中從頭到尾開始檢查以確保它是UTF-8。這可能意味着要弄清楚如何將您可能從網頁獲得的Latin-1翻譯成UTF-8。 EncodeEncode::FixLatin是有用的。 Juerd's Perl Unicode Advice也很有幫助。

我的最新書籍Effective Perl Programming, 2nd Edition專門研究這些問題。由於所有這些問題,寫這篇文章並不是一個特別有趣的章節,但是一旦你把所有的東西都寫完了,它就會變得更有意義。但是,它在三月份出來,今天不會幫助你。 :(

相關問題