在perl內部, 字串結構由兩部分組成: 資料和utf8 flag.
例如:
utf8 flag 資料on 中文
如果utf8 flag為on的話, perl就會把「中文」當成utf8字串來處理, 如果utf8 flag為off, perl就會把他當成octets來處理.
所有字串相關的函式包括正規表示式都會受utf8 flag的影響.
use5.012
;use
encode ;
my$str="
中文處理";
encode::_utf8_on($str);#
utf-8 編碼輸出是 12
say length($str
);encode::_utf8_off($str);#
輸出是4
say length($str);
utf8 flag開啟的情況下, 正規表示式中的\w能夠匹配中文, 反之則不能.
如何確定乙個字串的utf8 flag是否已開啟?
使用encode::is_utf8($str). 這個函式並是檢視它的utf8 flag是否開啟.
use5.012
;use
encode;
my$str="
中文處理";
encode::_utf8_on($str
);say
'utf8 flag: on
'if encode::is_utf8($str
);encode::_utf8_off($str
);say
'utf8 flag: off
'unless encode::is_utf8($str);
eq是乙個字串比較操作符, 只有當字串的內容一致並且utf8 flag的狀態也是一致的時候, eq才會返回真.
1.本身不是utf8編碼的需要轉為utf8編碼並開啟utf8 flag 標識
例如:本身是gb2312的**
useencode qw(encode decode)
$str = decode(』gb2312『, $str);
2.本身是utf編碼的,未開啟utf8 標識的
可以通過三種方式進行開啟
$str = decode_utf8($str);$str =decode("
utf8
", $str
);encode::_utf8_on($str);
對於任何要處理的unicode字串, 1.把它的編碼轉換成utf8; 2.開啟它的utf8 flag
1.命令列引數和標準輸入
utf8 flag 關閉的
2.源**中的字串
utf8 flag 關閉
技巧:最好的解決方式 1. 程式檔案使用utf-8方式儲存 2.檔案開頭使用use utf8; 開啟on標識
3.從檔案讀入.你的檔案是什麼編碼, 讀進來就是什麼編碼了. 讀進來以後, utf8 flag是off狀態.
4.網頁是什麼編碼就是什麼編碼, utf8 flag是off狀態.
輸出的集中情況:
1.標準輸出. 標準輸出的編碼跟locale一致. 輸出的時候utf8 flag應該關閉, 不然就會出警告:
wide character in print at 。。。。。
小技巧: binmode(stdout, ":encoding(gb2312)"); 中文locale 可以用這種方式集中轉碼
2.gui程式. utf8編碼, utf8 flag開啟
3.網頁post 根據網頁的編碼。post出去的指示字串部分。無所謂。
perl處理中文
perl從5.6開始已經開始在內部使用utf8編碼來表示字元,也就是說對中文以及其他語言字元的處理應該是完全沒有問題的。我們只需要利用好encode這個模組便能充分發揮perl的utf8字元的優勢了。下面就以中文文字的處理為例進行說明,比如有乙個字串 測試文字 我們想要把這個中文字串拆成單個字元,可...
Perl對中文的處理 encode,decode
perl對中文的處理 encode,decode 最近在處理中文時遇到亂碼的問題,google了一下,發現下面這篇文章。茅塞頓開!perl從5.6開始已經開始在內部使用utf8編碼來表示字元,也就是說對中文以及其他語言字元的處理應該是完全沒有問題的。我們只需要利用好encode這個模組便能充分發揮p...
perl對中文的處理 encode,decode
最近在處理中文時遇到亂碼的問題,google了一下,發現下面這篇文章。茅塞頓開!perl從5.6開始已經開始在內部使用utf8編碼來表示字元,也就是說對中文以及其他語言字元的處理應該是完全沒有問題的。我們只需要利用好encode這個模組便能充分發揮perl的utf8字元的優勢了。下面就以中文文字的處...