length()的perldoc
頁面告訴我,我應該使用bytes::length(EXPR)
來查找以字節爲單位的Unicode字符串,或者bytes頁與此相呼應。如何在Perl中查找Unicode字符串的長度?
use bytes;
$ascii = 'Lorem ipsum dolor sit amet';
$unicode = 'Lørëm ípsüm dölör sît åmét';
print "ASCII: " . length($ascii) . "\n";
print "ASCII bytes: " . bytes::length($ascii) . "\n";
print "Unicode: " . length($unicode) . "\n";
print "Unicode bytes: " . bytes::length($unicode) . "\n";
這個腳本的輸出,但是,與聯機幫助不同意:
ASCII: 26
ASCII bytes: 26
Unicode: 35
Unicode bytes: 35
在我看來,長度()和字節長度::()返回兩個ASCII & Unicode字符串相同。默認情況下,我的編輯器設置爲將文件編寫爲UTF-8,所以我認爲Perl會將整個腳本解釋爲Unicode,那麼意味着length()會自動正確處理Unicode字符串?
編輯:查看我的評論;我的問題並沒有太大意義,因爲在上面的例子中,length()是而不是「正常」工作 - 它顯示的是Unicode字符串的長度(以字節爲單位),而不是字符。我最初偶然發現的這個共振是一個程序,我需要在HTTP消息中設置Content-Lenth標頭(以字節爲單位)。我已經閱讀了Perl中的Unicode,並期望不得不做一些事情來使事情發揮作用,但當length()正好返回我需要的蝙蝠時,我很困惑!在Perl中查看use utf8
,use bytes
和no bytes
的概述。
我不明白你爲什麼說length()正確處理unicode字符串。在你的例子中,length()給出了與bytes :: length()相同的結果,即字節數,而不是字符數(這是正確的)。 – Inshallah 2009-08-25 07:26:59
換句話說,length($ unicode)將該字符串解釋爲ASCII,而不是unicode。 – Inshallah 2009-08-25 07:28:41
你絕對正確!我完全忽略了這個事實 - 在我的程序中,我使用length()在HTTP消息中設置Content-Length頭,這需要以字節爲單位。在閱讀length()文檔後,我期待該函數返回不正確的東西,但實際上,當Perl處於「use bytes」模式時,它正是我想要的:Unicode字符串的長度(以字節爲單位),而不是字符。 – 2009-08-25 15:47:09