Perl:根据环境选择编码

Perl:根据环境选择编码,perl,internationalization,Perl,Internationalization,我正试图根据环境中的语言集来识别正确的perl编码。当语言是UTF-8语言时,这很有效,但有一位用户尝试在AIX上将其LANG设置为“Ja_JP” 不幸的是,我不知道如何将它转换成binmode可以接受的东西。根据上的Wikipedia页面 IBM CCSID 943具有与代码页932相同的扩展 所以您可以使用:编码(cp932) 要使:encoding(IBM-943)工作,需要在Encode::alias中创建别名 您可以提交功能请求以添加此别名,也可以在脚本中自己定义它: use Enc

我正试图根据环境中的语言集来识别正确的perl编码。当语言是UTF-8语言时,这很有效,但有一位用户尝试在AIX上将其LANG设置为“Ja_JP”


不幸的是,我不知道如何将它转换成binmode可以接受的东西。

根据上的Wikipedia页面

IBM CCSID 943具有与代码页932相同的扩展

所以您可以使用
:编码(cp932)


要使
:encoding(IBM-943)
工作,需要在Encode::alias中创建别名

您可以提交功能请求以添加此别名,也可以在脚本中自己定义它:

use Encode::Alias qw( define_alias );
define_alias( qr/^ibm-943$/i => '"cp932"' );
如果要继续,则需要将
define_alias
调用放在
BEGIN{}

use open ':std', ':locale';

cp932(以及IBM-943)与Shift JIS的不同之处在于
5C
是“
\
”(类似于ASCII)而不是“
¥
”。否则,字符集不会包含Windows目录分隔符。与cp932结合使用的字体有时显示为
\
,因此每个perl开发人员都必须捕获并处理这些字体。我希望它已经被封装在某个地方了,但可能只是AIX没有被处理,因为它不是目标平台之一。谢谢,@ikegami。它被封装在某个地方。开发人员不需要捕捉和处理它。例如,
:encoding(latin1)
之所以有效,是因为
latin1
在Encode::Alias中定义为
iso-8859-1
的别名。只是您的特定别名没有在Encode::alias中定义。同样,您需要做的是提交一个特性请求,将此别名添加到Encode::alias。。。。一旦它出现了,你只需要在我的答案底部的陈述。
use open ':std', ':locale';