Perl中文編碼的處理

2022-08-16 15:33:19 字數 1908 閱讀 7594

在perl內部, 字串結構由兩部分組成: 資料和utf8 flag.

例如:

utf8 flag    資料

on 中文

如果utf8 flag為on的話, perl就會把「中文」當成utf8字串來處理, 如果utf8 flag為off, perl就會把他當成octets來處理.

所有字串相關的函式包括正規表示式都會受utf8 flag的影響.

use

5.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是否開啟.

use

5.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的**

use

encode 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字元的優勢了。下面就以中文文字的處...