1*f2a19305Safresh1# vim: syntax=pod 255745691Smillert 3898184e3Ssthen如果你用一般的文字編輯器閱覽這份文件, 請忽略文中奇特的註記字符. 4898184e3Ssthen這份文件是以 POD (簡明文件格式) 寫成; 這種格式是為了能讓人直接讀取, 5898184e3Ssthen而特別設計的. 關於此格式的進一步資訊, 請參考 perlpod 線上文件. 655745691Smillert 7*f2a19305Safresh1=encoding utf8 8*f2a19305Safresh1 955745691Smillert=head1 NAME 1055745691Smillert 11898184e3Ssthenperltw - 正體中文 Perl 指南 1255745691Smillert 1355745691Smillert=head1 DESCRIPTION 1455745691Smillert 15898184e3Ssthen歡迎來到 Perl 的天地! 1655745691Smillert 17898184e3Ssthen從 5.8.0 版開始, Perl 具備了完善的 Unicode (萬國碼) 支援, 18898184e3Ssthen也連帶支援了許多拉丁語系以外的編碼方式; CJK (中日韓) 便是其中的一部份. 19898184e3SsthenUnicode 是國際性的標準, 試圖涵蓋世界上所有的字符: 西方世界, 東方世界, 20898184e3Ssthen以及兩者間的一切 (希臘文, 敘利亞文, 阿拉伯文, 希伯來文, 印度文, 21898184e3Ssthen印地安文, 等等). 它也容納了多種作業系統與平臺 (如 PC 及麥金塔). 2255745691Smillert 23898184e3SsthenPerl 本身以 Unicode 進行操作. 這表示 Perl 內部的字串資料可用 Unicode 24898184e3Ssthen表示; Perl 的函式與算符 (例如正規表示式比對) 也能對 Unicode 進行操作. 25898184e3Ssthen在輸入及輸出時, 為了處理以 Unicode 之前的編碼方式儲存的資料, Perl 26898184e3Ssthen提供了 Encode 這個模組, 可以讓你輕易地讀取及寫入舊有的編碼資料. 2755745691Smillert 28898184e3SsthenEncode 延伸模組支援下列正體中文的編碼方式 ('big5' 表示 'big5-eten'): 2955745691Smillert 30898184e3Ssthen big5-eten Big5 編碼 (含倚天延伸字形) 31898184e3Ssthen big5-hkscs Big5 + 香港外字集, 2001 年版 32898184e3Ssthen cp950 字碼頁 950 (Big5 + 微軟添加的字符) 3355745691Smillert 34898184e3Ssthen舉例來說, 將 Big5 編碼的檔案轉成 Unicode, 祗需鍵入下列指令: 3555745691Smillert 366fb12b70Safresh1 perl -MEncode -pe '$_= encode( utf8 => decode( big5 => $_ ) )' \ 376fb12b70Safresh1 < file.big5 > file.utf8 3855745691Smillert 39898184e3SsthenPerl 也內附了 "piconv", 一支完全以 Perl 寫成的字符轉換工具程式, 用法如下: 4055745691Smillert 4155745691Smillert piconv -f big5 -t utf8 < file.big5 > file.utf8 4255745691Smillert piconv -f utf8 -t big5 < file.utf8 > file.big5 4355745691Smillert 446fb12b70Safresh1另外,若程式碼本身以 utf8 編碼儲存,配合使用 utf8 模組,可讓程式碼中字串以及其運 456fb12b70Safresh1算皆以字符為單位,而不以位元為單位,如下所示: 4655745691Smillert 4755745691Smillert #!/usr/bin/env perl 486fb12b70Safresh1 use utf8; 496fb12b70Safresh1 print length("駱駝"); # 2 (不是 6) 506fb12b70Safresh1 print index("諄諄教誨", "教誨"); # 2 (從 0 起算第 2 個字符) 5155745691Smillert 5255745691Smillert 53898184e3Ssthen=head2 額外的中文編碼 5455745691Smillert 55de8cc8edSafresh1如果需要更多的中文編碼, 可以從 CPAN (L<https://www.cpan.org/>) 下載 56898184e3SsthenEncode::HanExtra 模組. 它目前提供下列編碼方式: 5755745691Smillert 58898184e3Ssthen cccii 1980 年文建會的中文資訊交換碼 59898184e3Ssthen euc-tw Unix 延伸字符集, 包含 CNS11643 平面 1-7 60898184e3Ssthen big5plus 中文數位化技術推廣基金會的 Big5+ 61898184e3Ssthen big5ext 中文數位化技術推廣基金會的 Big5e 6255745691Smillert 63898184e3Ssthen另外, Encode::HanConvert 模組則提供了簡繁轉換用的兩種編碼: 6455745691Smillert 65898184e3Ssthen big5-simp Big5 正體中文與 Unicode 簡體中文互轉 66898184e3Ssthen gbk-trad GBK 簡體中文與 Unicode 正體中文互轉 6755745691Smillert 68898184e3Ssthen若想在 GBK 與 Big5 之間互轉, 請參考該模組內附的 b2g.pl 與 g2b.pl 兩支程式, 69898184e3Ssthen或在程式內使用下列寫法: 7055745691Smillert 7155745691Smillert use Encode::HanConvert; 72898184e3Ssthen $euc_cn = big5_to_gb($big5); # 從 Big5 轉為 GBK 73898184e3Ssthen $big5 = gb_to_big5($euc_cn); # 從 GBK 轉為 Big5 7455745691Smillert 75898184e3Ssthen=head2 進一步的資訊 7655745691Smillert 77898184e3Ssthen請參考 Perl 內附的大量說明文件 (不幸全是用英文寫的), 來學習更多關於 78898184e3SsthenPerl 的知識, 以及 Unicode 的使用方式. 不過, 外部的資源相當豐富: 7955745691Smillert 80898184e3Ssthen=head2 提供 Perl 資源的網址 8155745691Smillert 8255745691Smillert=over 4 8355745691Smillert 84de8cc8edSafresh1=item L<https://www.perl.org/> 8555745691Smillert 86de8cc8edSafresh1Perl 的首頁 8755745691Smillert 88de8cc8edSafresh1=item L<https://www.perl.com/> 89de8cc8edSafresh1 90de8cc8edSafresh1由 Perl 基金會所營運的文章輯錄 91de8cc8edSafresh1 92de8cc8edSafresh1=item L<https://www.cpan.org/> 9355745691Smillert 94898184e3SsthenPerl 綜合典藏網 (Comprehensive Perl Archive Network) 9555745691Smillert 96de8cc8edSafresh1=item L<https://lists.perl.org/> 9755745691Smillert 98898184e3SsthenPerl 郵遞論壇一覽 9955745691Smillert 10055745691Smillert=back 10155745691Smillert 102898184e3Ssthen=head2 學習 Perl 的網址 10355745691Smillert 10455745691Smillert=over 4 10555745691Smillert 106256a93a4Safresh1=item L<http://www.oreilly.com.cn/index.php?func=booklist&cat=68> 10755745691Smillert 108898184e3Ssthen正體中文版的歐萊禮 Perl 書藉 10955745691Smillert 11055745691Smillert=back 11155745691Smillert 112898184e3Ssthen=head2 Perl 使用者集會 11355745691Smillert 11455745691Smillert=over 4 11555745691Smillert 116de8cc8edSafresh1=item L<https://www.pm.org/groups/taiwan.html> 11755745691Smillert 118898184e3Ssthen臺灣 Perl 推廣組一覽 11955745691Smillert 120256a93a4Safresh1=item L<irc://chat.freenode.org/#perl.tw> 12155745691Smillert 122898184e3SsthenPerl.tw 線上聊天室 12355745691Smillert 12455745691Smillert=back 12555745691Smillert 126898184e3Ssthen=head2 Unicode 相關網址 12755745691Smillert 12855745691Smillert=over 4 12955745691Smillert 130de8cc8edSafresh1=item L<https://www.unicode.org/> 13155745691Smillert 132898184e3SsthenUnicode 學術學會 (Unicode 標準的制定者) 13355745691Smillert 13455745691Smillert=item L<http://www.cl.cam.ac.uk/%7Emgk25/unicode.html> 13555745691Smillert 136898184e3SsthenUnix/Linux 上的 UTF-8 及 Unicode 答客問 13755745691Smillert 13855745691Smillert=back 13955745691Smillert 140898184e3Ssthen=head2 中文化資訊 14155745691Smillert 14255745691Smillert=over 4 14355745691Smillert 144898184e3Ssthen=item 中文化軟體聯盟 14555745691Smillert 14655745691SmillertL<http://www.cpatch.org/> 14755745691Smillert 14855745691Smillert=back 14955745691Smillert 15055745691Smillert=head1 SEE ALSO 15155745691Smillert 1526fb12b70Safresh1L<Encode>, L<Encode::TW>, L<perluniintro>, L<perlunicode> 15355745691Smillert 15455745691Smillert=head1 AUTHORS 15555745691Smillert 15655745691SmillertJarkko Hietaniemi E<lt>jhi@iki.fiE<gt> 15755745691Smillert 158898184e3SsthenAudrey Tang (唐鳳) E<lt>audreyt@audreyt.orgE<gt> 15955745691Smillert 16055745691Smillert=cut 161