2013-06-20 67 views
1

我在閱讀關於Perl的Encode和utf8。Perl字符串編碼utf 8

的醫生說:

$八位字節= encode_utf8($字符串);

相當於

$八位字節=編碼( 「UTF8」,$字符串)。

$ string中的字符以Perl的內部格式編碼,並且 結果以八位字節序列的形式返回。

我不知道這是什麼意思。 Perl中的字符串不是一串八位字節(即字節)嗎?

那麼究竟是什麼之間的區別:

$string$octets

回答

4

不,Perl中的字符串是字符序列,不一定是八位字節。的chrord功能(整數和單個字符之間變換),僅舉兩個可以處理整數值大於255更大的例如

$string = "\x{0421}\x{041F}"; 
print ord($_)," " for split //, $string; 

輸出

1057 1055 

當一個字符串被寫入到終端,文件或其他輸出流,接收字符串的設備通常需要和期望字節,但是,這是編碼進入的地方。正如您所看到的,UTF-8是一種用於在範圍內編碼單個值的方案0x7F-0x10FFFF分成多個字節。

$octets = Encode::encode("utf-8", "\x{0421}\x{041F}"); 
print ord($_)," " for split //, $octets; 

現在的輸出是

208 161 208 159 

和適合於被存儲在一個文件系統。

在內部,perl(在所有小寫字母中,這是指Perl的可執行實現,編程語言規範)通常使用UTF-8來表示具有「寬」字符的字符串,但這不是每個人都會正常使用的不必擔心。

+0

'\ x'''是什麼意思? –

+0

'\ x'是其編碼是十六進制數字0x421的字符。這顯然是'CYRILLIC CAPITAL LETTER ES'(見http://www.fileformat.info/info/unicode/char/421) –

+0

那麼,爲什麼不解碼而不是解碼成Perl字符呢? –