xref: /openbsd-src/gnu/usr.bin/perl/README.cn (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
1*f2a19305Safresh1# vim: syntax=pod
255745691Smillert
391f110e0Safresh1如果你用一般的文字编辑器阅览这份文件, 请忽略文中奇特的注记字符.
491f110e0Safresh1这份文件是以 POD (简明文件格式) 写成; 这种格式是为了能让人直接阅读,
5256a93a4Safresh1而特别设计的. 关于此格式的进一步信息, 请参考 perlpod 在线文档.
6850e2753Smillert
7*f2a19305Safresh1=encoding utf8
8*f2a19305Safresh1
955745691Smillert=head1 NAME
1055745691Smillert
1191f110e0Safresh1perlcn - 简体中文 Perl 指南
1255745691Smillert
1355745691Smillert=head1 DESCRIPTION
1455745691Smillert
1591f110e0Safresh1欢迎来到 Perl 的天地!
1655745691Smillert
17256a93a4Safresh1从 5.8.0 版开始, Perl 具备了完善的 Unicode (统一码) 支持,
18256a93a4Safresh1也连带支持了许多拉丁语系以外的编码方式; CJK (中日韩) 便是其中的一部分.
1991f110e0Safresh1Unicode 是国际性的标准, 试图涵盖世界上所有的字符: 西方世界, 东方世界,
20256a93a4Safresh1以及两者间的一切 (希腊文, 叙利亚文, 阿拉伯文, 希伯来文, 印度文,
21256a93a4Safresh1印地安文, 等等). 它也容纳了多种操作系统与平台 (如 PC 及麦金塔).
2255745691Smillert
2391f110e0Safresh1Perl 本身以 Unicode 进行操作. 这表示 Perl 内部的字符串数据可用 Unicode
24256a93a4Safresh1表示; Perl 的函数与运算符 (例如正则表达式匹配) 也能对 Unicode 进行操作.
25256a93a4Safresh1在输入及输出时, 为了处理以 Unicode 之前的编码方式储存的数据, Perl
26256a93a4Safresh1提供了 Encode 这个模块, 可以让你轻易地读写使用旧有的编码格式的数据.
2755745691Smillert
28256a93a4Safresh1Encode 扩展模块支持下列简体中文的编码方式 ('gb2312' 表示 'euc-cn'):
2955745691Smillert
30256a93a4Safresh1    euc-cn	Unix 扩展字符集, 也就是俗称的国标码
3191f110e0Safresh1    gb2312-raw	未经处理的 (低比特) GB2312 字符表
3291f110e0Safresh1    gb12345	未经处理的中国用繁体中文编码
3391f110e0Safresh1    iso-ir-165	GB2312 + GB6345 + GB8565 + 新增字符
3491f110e0Safresh1    cp936	字码页 936, 也可以用 'GBK' (扩充国标码) 指明
3591f110e0Safresh1    hz		7 比特逸出式 GB2312 编码
3655745691Smillert
37256a93a4Safresh1举例来说, 将 EUC-CN 编码的文件转成 Unicode, 只需输入以下命令:
3855745691Smillert
3955745691Smillert    perl -Mencoding=euc-cn,STDOUT,utf8 -pe1 < file.euc-cn > file.utf8
4055745691Smillert
41256a93a4Safresh1Perl 也内附了 "piconv", 一个完全以 Perl 写成的字符转换工具程序, 用法如下:
4255745691Smillert
4355745691Smillert    piconv -f euc-cn -t utf8 < file.euc-cn > file.utf8
4455745691Smillert    piconv -f utf8 -t euc-cn < file.utf8 > file.euc-cn
4555745691Smillert
46256a93a4Safresh1另外, 利用 encoding 模块, 你可以轻易写出以字符为单位的代码, 如下所示:
4755745691Smillert
4855745691Smillert    #!/usr/bin/env perl
4991f110e0Safresh1    # 启动 euc-cn 字串解析; 标准输出入及标准错误都设为 euc-cn 编码
5055745691Smillert    use encoding 'euc-cn', STDIN => 'euc-cn', STDOUT => 'euc-cn';
5191f110e0Safresh1    print length("骆驼");	     #  2 (双引号表示字符)
5291f110e0Safresh1    print length('骆驼');	     #  4 (单引号表示字节)
5391f110e0Safresh1    print index("谆谆教诲", "蛔唤"); # -1 (不包含此子字符串)
5491f110e0Safresh1    print index('谆谆教诲', '蛔唤'); #  1 (从第二个字节开始)
5555745691Smillert
5691f110e0Safresh1在最后一列例子里, "谆" 的第二个字节与 "谆" 的第一个字节结合成 EUC-CN
5791f110e0Safresh1码的 "蛔"; "谆" 的第二个字节则与 "教" 的第一个字节结合成 "唤".
58256a93a4Safresh1这解决了以前 EUC-CN 码匹配处理上常见的问题.
5955745691Smillert
6091f110e0Safresh1=head2 额外的中文编码
6155745691Smillert
62de8cc8edSafresh1如果需要更多的中文编码, 可以从 CPAN (L<https://www.cpan.org/>) 下载
6391f110e0Safresh1Encode::HanExtra 模块. 它目前提供下列编码方式:
6455745691Smillert
6591f110e0Safresh1    gb18030	扩充过的国标码, 包含繁体中文
6655745691Smillert
6791f110e0Safresh1另外, Encode::HanConvert 模块则提供了简繁转换用的两种编码:
6855745691Smillert
6991f110e0Safresh1    big5-simp	Big5 繁体中文与 Unicode 简体中文互转
7091f110e0Safresh1    gbk-trad	GBK 简体中文与 Unicode 繁体中文互转
7155745691Smillert
72256a93a4Safresh1若想在 GBK 与 Big5 之间互转, 请参考该模块内附的 b2g.plg2b.pl 两个程序,
7391f110e0Safresh1或在程序内使用下列写法:
7455745691Smillert
7555745691Smillert    use Encode::HanConvert;
7691f110e0Safresh1    $euc_cn = big5_to_gb($big5); # 从 Big5 转为 GBK
7791f110e0Safresh1    $big5 = gb_to_big5($euc_cn); # 从 GBK 转为 Big5
7855745691Smillert
7991f110e0Safresh1=head2 进一步的信息
8055745691Smillert
8191f110e0Safresh1请参考 Perl 内附的大量说明文件 (不幸全是用英文写的), 来学习更多关于
8291f110e0Safresh1Perl 的知识, 以及 Unicode 的使用方式. 不过, 外部的资源相当丰富:
8355745691Smillert
8491f110e0Safresh1=head2 提供 Perl 资源的网址
8555745691Smillert
8655745691Smillert=over 4
8755745691Smillert
88de8cc8edSafresh1=item L<https://www.perl.org/>
8955745691Smillert
90de8cc8edSafresh1=back
9155745691Smillert
92de8cc8edSafresh1Perl 的首页
93de8cc8edSafresh1
94de8cc8edSafresh1=over 4
95de8cc8edSafresh1
96de8cc8edSafresh1=item L<https://www.perl.com/>
97de8cc8edSafresh1
98256a93a4Safresh1由 Perl 基金会运营的文章辑录
99de8cc8edSafresh1
100de8cc8edSafresh1=item L<https://www.cpan.org/>
10155745691Smillert
10291f110e0Safresh1Perl 综合典藏网 (Comprehensive Perl Archive Network)
10355745691Smillert
104de8cc8edSafresh1=item L<https://lists.perl.org/>
10555745691Smillert
10691f110e0Safresh1Perl 邮递论坛一览
10755745691Smillert
10855745691Smillert=back
10955745691Smillert
11091f110e0Safresh1=head2 学习 Perl 的网址
11155745691Smillert
11255745691Smillert=over 4
11355745691Smillert
114898184e3Ssthen=item L<http://www.oreilly.com.cn/index.php?func=booklist&cat=68>
11555745691Smillert
11691f110e0Safresh1简体中文版的欧莱礼 Perl 书藉
11755745691Smillert
11855745691Smillert=back
11955745691Smillert
12091f110e0Safresh1=head2 Perl 使用者集会
12155745691Smillert
12255745691Smillert=over 4
12355745691Smillert
124de8cc8edSafresh1=item L<https://www.pm.org/groups/asia.html>
12555745691Smillert
12691f110e0Safresh1中国 Perl 推广组一览
12755745691Smillert
12855745691Smillert=back
12955745691Smillert
13091f110e0Safresh1=head2 Unicode 相关网址
13155745691Smillert
13255745691Smillert=over 4
13355745691Smillert
134de8cc8edSafresh1=item L<https://www.unicode.org/>
13555745691Smillert
13691f110e0Safresh1Unicode 学术学会 (Unicode 标准的制定者)
13755745691Smillert
138de8cc8edSafresh1=item L<https://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
13955745691Smillert
140256a93a4Safresh1Unix/Linux 上的 UTF-8 及 Unicode 常见问题解答
14155745691Smillert
14255745691Smillert=back
14355745691Smillert
14455745691Smillert=head1 SEE ALSO
14555745691Smillert
14655745691SmillertL<Encode>, L<Encode::CN>, L<encoding>, L<perluniintro>, L<perlunicode>
14755745691Smillert
14855745691Smillert=head1 AUTHORS
14955745691Smillert
15055745691SmillertJarkko Hietaniemi E<lt>jhi@iki.fiE<gt>
15155745691Smillert
15291f110e0Safresh1Audrey Tang (唐凤) E<lt>audreyt@audreyt.orgE<gt>
15355745691Smillert
154256a93a4Safresh1Sizhe Zhao E<lt>prc.zhao@outlook.comE<gt>
155256a93a4Safresh1
15655745691Smillert=cut
157