perl Unicode編程

來源:互聯網
上載者:User

標籤:

在perl語言中,字串只有兩種形式:

(1)位元組流字串:不管字串是何種內容、何種編碼,都解析為單位元組的位元組串。

(2)字元流字串:按照UTF8編碼方案,從左至右把位元組流解析為連續的字元流。

perl如何確定一個字串是位元組流字串還是採用UTF8編碼的字元流字串呢?

在Perl內部,每個字串都有一個UTF8編碼標誌,這個標誌有兩個狀態:on或者off。如果標誌為on,就是字元流字串,反之就是位元組流字串。預設情況下,perl語言字串的編碼標識都是off狀態,即字串都是以位元組流字串類型進行操作的。

要開啟和關閉字串的UTF8編碼標誌,可以採用Encode模組的函數_utf8_on()和_utf8_off()來實現。


如果一個變數的內容是從檔案讀入的,並且這個檔案是UTF8編碼的,則包含UTF8編碼字元的字串預設為位元組流字串。如果需要轉換為字元流字串,也需要用Encode::_utf8_on()開啟UTF8字元流處理的標識。

檔案input.txt以utf8編碼:


use Encode;use utf8;#使原始碼中包含漢字的字串常量統一編程字元流字串形式open(In,'input.txt');while($line=<In>){chomp($line);Encode::_utf8_on($line);if($line=~/^[你,我,他]/){print encode("gb2312",$line)."\n";}}close(In);
輸出結果:


注意:原始碼本身也是UTF8編碼格式,Regex中包含的漢字就是UTF8編碼的,如果讓這些漢字當做字元流常量來處理,必須在頭部加入"use utf8"說明,這個說明會使原始碼中出現的包含漢字的字串常量統一變成字元流字串形式。



perl Unicode編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.