perljp - 日本语 Perl 指南
欢迎来到 Perl 世界!
从 Perl 5.8.0 开始,Unicode 支持得到了大幅增强,结果是除了拉丁字母之外的字符编码支持也加入了,包括 CJK(中文、日文、韩文)。Unicode 旨在用一种字符编码来处理全世界所有字符的标准规范,它已经包含了从东到西以及中间的字符(希腊字母、西里尔字母、阿拉伯字母、希伯来字母、梵文等等),以及以前由操作系统供应商自行定义的字符(PC 和 Macintosh)。
Perl 本身使用 Unicode 运行。Perl 脚本中的字符串字面量和正则表达式都基于 Unicode。为了进行输入输出,Perl 标准配备了支持以前使用的各种字符编码的模块“Encode”,可以轻松地进行 Unicode 与这些字符编码之间的相互转换。
目前 Encode 支持的字符编码如下:
7bit-jis AdobeStandardEncoding AdobeSymbol AdobeZdingbat
ascii big5 big5-hkscs cp1006
cp1026 cp1047 cp1250 cp1251
cp1252 cp1253 cp1254 cp1255
cp1256 cp1257 cp1258 cp37
cp424 cp437 cp500 cp737
cp775 cp850 cp852 cp855
cp856 cp857 cp860 cp861
cp862 cp863 cp864 cp865
cp866 cp869 cp874 cp875
cp932 cp936 cp949 cp950
dingbats euc-cn euc-jp euc-kr
gb12345-raw gb2312-raw gsm0338 hp-roman8
hz iso-2022-jp iso-2022-jp-1 iso-8859-1
iso-8859-10 iso-8859-11 iso-8859-13 iso-8859-14
iso-8859-15 iso-8859-16 iso-8859-2 iso-8859-3
iso-8859-4 iso-8859-5 iso-8859-6 iso-8859-7
iso-8859-8 iso-8859-9 iso-ir-165 jis0201-raw
jis0208-raw jis0212-raw johab koi8-f
koi8-r koi8-u ksc5601-raw MacArabic
MacCentralEurRoman MacChineseSimp MacChineseTrad MacCroatian
MacCyrillic MacDingbats MacFarsi MacGreek
MacHebrew MacIcelandic MacJapanese MacKorean
MacRoman MacRomanian MacRumanian MacSami
MacSymbol MacThai MacTurkish MacUkrainian
nextstep posix-bc shiftjis symbol
UCS-2BE UCS-2LE UTF-16 UTF-16BE
UTF-16LE UTF-32 UTF-32BE UTF-32LE
utf8 viscii
(全114種類)
例如,要将字符编码为 FOO 的文件转换为 UTF-8,请执行以下操作:
perl -Mencoding=FOO,STDOUT,utf8 -pe1 < file.FOO > file.utf8
此外,Perl 还附带了一个完全用 Perl 编写的字符编码转换实用程序 piconv,因此也可以执行以下操作:
piconv -f FOO -t utf8 < file.FOO > file.utf8
piconv -f utf8 -t FOO < file.utf8 > file.FOO
在 5.8 之前的版本中,如果脚本是 EUC-JP,则至少可以处理字面量。此外,作为处理输入输出的模块,Jcode.pm(http://openlab.ring.gr.jp/Jcode/)和 perl4 的实用程序 jcode.pl 分别存在,并且许多人可能知道它们经常用于支持日语的 CGI。但是,无法正确处理日语正则表达式。
在 Perl 5.005 之前的版本中,存在一个专门针对日语的本地化版本 Jperl(http://homepage2.nifty.com/kipp/perl/jperl/index.html ※1)。此外,Mac OS 9.x/Classic 的 Perl,MacPerl 的日语版本也存在,名为 MacJPerl(https://habilis.net/macjperl/)。在这些版本中,除了 EUC-JP 之外,还可以直接处理 Shift_JIS,并且还可以处理日语正则表达式。
在 Perl 5.8 中,所有这些功能都可以在 Perl 本身中实现,不仅可以处理日语,还可以同时处理上述 114 种字符编码。此外,还可以轻松地从 CPAN 等地方获取新的字符编码模块。
※1: 由于托管服务的终止,目前无法查看。您可以从 Vector ( https://www.vector.co.jp/soft/win95/util/se098198.html ) 获取 Windows 版二进制文件,从 CPAN ( https://www.cpan.org/src/unsupported/4.036/jperl/ ) 获取 perl4 的补丁。
入出力
以下示例均将 Shift_JIS 输入转换为 EUC-JP 输出。
# jcode.pl
require "jcode.pl";
while(<>){
jcode::convert(*_, 'euc', 'sjis');
print;
}
# Jcode.pm
use Jcode;
while(<>){
print Jcode->new($_, 'sjis')->euc;
}
# Perl 5.8
use Encode;
while(<>){
from_to($_, 'shiftjis', 'euc-jp');
print;
}
# Perl 5.8 - encoding を利用して
use encoding 'euc-jp', STDIN => 'shiftjis';
while(<>){
print;
}
Jperl 兼容脚本
只需更改所谓的“shebang”,大多数 Jperl 脚本就可以无需修改地使用。
#!/path/to/jperl
↓
#!/path/to/perl -Mencoding=euc-jp
有关详细信息,请参阅 perldoc encoding。
Perl 附带大量文档,详细介绍了 Perl 的新功能、Unicode 支持以及 Encode 模块的使用方法(遗憾的是,大多数文档都是英文)。您可以使用以下命令查看其中一部分。
perldoc perlunicode # PerlのUnicodeサポート全般
perldoc Encode # Encodeモジュールに関して
perldoc Encode::JP # うち日本語文字コードに関して
Perl 主页
Perl 基金会运营的文集
CPAN (Comprehensive Perl Archive Network)
MetaCPAN CPAN 的搜索引擎
Perl 邮件列表集
perldoc.jp Perl 的官方文档,模块文档的日语翻译
O'Reilly 公司的 Perl 相关书籍(简体中文)
O'Reilly 公司的 Perl 相关书籍(日语)
亚洲地区的 Perl Mongers (Perl 用户组) 列表
一般社団法人 Japan Perl Association (JPA) 致力于推广 Perl 技术和文化的组织
Unicode 联盟 (Unicode 标准的制定机构)
Unix/Linux 的 UTF-8 和 Unicode 常见问题解答
Unix/Linux 的 UTF-8 和 Unicode 常见问题解答 (韩语翻译)
Jarkko Hietaniemi <[email protected]>
Dan Kogai (小飼 弾) <[email protected]>
Shogo Ichinose (一野瀬 翔吾) <[email protected]>