從 5.8.0 版開始, Perl 具備了完善的 Unicode (è¬åœ‹ç¢¼) 支æ´, 也連帶支æ´äº†è¨±å¤šæ‹‰ä¸èªžç³»ä»¥å¤–的編碼方å¼; CJK (䏿—¥éŸ“) 便是其ä¸çš„一部份. Unicode 是國際性的標準, 試圖涵蓋世界上所有的å—符: 西方世界, æ±æ–¹ä¸–界, 以åŠå…©è€…間的一切 (希臘文, 敘利亞文, 阿拉伯文, 希伯來文, å°åº¦æ–‡, å°åœ°å®‰æ–‡, ç‰ç‰). 它也容ç´äº†å¤šç¨®ä½œæ¥ç³»çµ±èˆ‡å¹³è‡º (如 PC åŠéº¥é‡‘å¡”).
Perl 本身以 Unicode 進行æ“作. 這表示 Perl 內部的å—串資料å¯ç”¨ Unicode 表示; Perl 的函å¼èˆ‡ç®—符 (例如æ£è¦è¡¨ç¤ºå¼æ¯”å°) ä¹Ÿèƒ½å° Unicode 進行æ“作. 在輸入åŠè¼¸å‡ºæ™‚, 為了處ç†ä»¥ Unicode 之å‰çš„編碼方å¼å„²å˜çš„資料, Perl æä¾›äº† Encode 這個模組, å¯ä»¥è®“ä½ è¼•æ˜“åœ°è®€å–åŠå¯«å…¥èˆŠæœ‰çš„編碼資料.
Encode 延伸模組支æ´ä¸‹åˆ—æ£é«”䏿–‡çš„ç·¨ç¢¼æ–¹å¼ ('big5' 表示 'big5-eten'):
big5-eten Big5 編碼 (å«å€šå¤©å»¶ä¼¸å—å½¢)
big5-hkscs Big5 + 香港外å—集, 2001 年版
cp950 å—碼é 950 (Big5 + å¾®è»Ÿæ·»åŠ çš„å—符)
舉例來說, å°‡ Big5 ç·¨ç¢¼çš„æª”æ¡ˆè½‰æˆ Unicode, 祗需éµå…¥ä¸‹åˆ—指令:
perl -Mencoding=big5,STDOUT,utf8 -pe1 < file.big5 > file.utf8
Perl 也內附了 ``piconv'', 一支完全以 Perl 寫æˆçš„å—符轉æ›å·¥å…·ç¨‹å¼, 用法如下:
piconv -f big5 -t utf8 < file.big5 > file.utf8
piconv -f utf8 -t big5 < file.utf8 > file.big5
å¦å¤–, 利用 encoding 模組, ä½ å¯ä»¥è¼•易寫出以å—符為單ä½çš„程å¼ç¢¼, 如下所示:
#!/usr/bin/env perl
# 啟動 big5 å—串解æž; æ¨™æº–è¼¸å‡ºå…¥åŠæ¨™æº–錯誤都è¨ç‚º big5 編碼
use encoding 'big5', STDIN => 'big5', STDOUT => 'big5';
print length("é§±é§"); # 2 (雙引號表示å—符)
print length('é§±é§'); # 4 (單引號表示ä½å…ƒçµ„)
print index("諄諄教誨", "彖帢"); # -1 (ä¸åŒ…嫿¤åå—串)
print index('諄諄教誨', '彖帢'); # 1 (從第二個ä½å…ƒçµ„é–‹å§‹)
在最後一列例å裡, ``è«„'' 的第二個ä½å…ƒçµ„與 ``è«„'' 的第一個ä½å…ƒçµ„çµåˆæˆ Big5 碼的 ``å½–''; ``è«„'' 的第二個ä½å…ƒçµ„則與 ``æ•™'' 的第一個ä½å…ƒçµ„çµåˆæˆ ``帢''. é€™è§£æ±ºäº†ä»¥å‰ Big5 碼比å°è™•ç†ä¸Šå¸¸è¦‹çš„å•題.
cccii 1980 å¹´æ–‡å»ºæœƒçš„ä¸æ–‡è³‡è¨Šäº¤æ›ç¢¼
euc-tw Unix 延伸å—符集, åŒ…å« CNS11643 å¹³é¢ 1-7
big5plus 䏿–‡æ•¸ä½åŒ–技術推廣基金會的 Big5+
big5ext 䏿–‡æ•¸ä½åŒ–技術推廣基金會的 Big5e
å¦å¤–, Encode::HanConvert 模組則æä¾›äº†ç°¡ç¹è½‰æ›ç”¨çš„兩種編碼:
big5-simp Big5 æ£é«”䏿–‡èˆ‡ Unicode ç°¡é«”ä¸æ–‡äº’轉
gbk-trad GBK ç°¡é«”ä¸æ–‡èˆ‡ Unicode æ£é«”䏿–‡äº’轉
若想在 GBK 與 Big5 之間互轉, è«‹åƒè€ƒè©²æ¨¡çµ„內附的 b2g.pl 與 g2b.pl 兩支程å¼, 或在程å¼å…§ä½¿ç”¨ä¸‹åˆ—寫法:
use Encode::HanConvert;
$euc_cn = big5_to_gb($big5); # 從 Big5 轉為 GBK
$big5 = gb_to_big5($euc_cn); # 從 GBK 轉為 Big5