PERL:如何检测字符串编码以便使用正确的字符集

3

I have these 2 example strings:

$a = "點看"; 
$b = "pøp";

第一个字符串使用UTF-8字符集可以正确显示,但第二个字符串不能。 如果将字符集更改为ISO-8859-1,则可以正确显示第二个字符串。

我不知道如何使用UTF-8字符集显示Latin1字符。 或者至少,我需要一种解决方案来检测字符串类型(例如,“这是”utf-8“还是”iso-8859-1“),以便我可以使用适当的字符集来显示它。


1
一般来说,你的任务是不可能完成的。但是,Encode::Guess 可以帮你。 - choroba
嗯,那么其他人是如何在同一页上正确显示中文、法语/挪威语混合字符的呢?这就是我想要实现的。 - Claude
3
请全部使用UTF-8,不要一个字符串使用UTF-8,另一个使用Latin1。 - choroba
perlunicode - choroba
choroba,这只是两个例子。我无法将法语或挪威字符与中文混合使用。使用ikegami的解决方案,我可以使用utf-8字符集,一切都显示正确。 - Claude
显示剩余2条评论
1个回答

4

解码输入。编码输出。

use strict;
use warnings qw( all );
use feature qw( say );

use utf8;                             # Source code is encoded using UTF-8
use open ':std', ':encoding(UTF-8)';  # Terminal expects UTF-8

my $s1 = "點看"; 
my $s2 = "pøp";

say for $s1, $s2;

成功了!几个注意点...我正在使用perl 5.26。perl-open是一个必须单独安装的包。此外,您的代码中有一个错别字,两个$s1变量而不是$s1,$s2。非常感谢! - Claude
1
open.pm是Perl本身的一部分。它甚至无法单独安装。话说,一些Unix发行版喜欢删除Perl的某些部分,并将它们作为单独的软件包提供,尽管它们是Perl本身的一部分。 - ikegami
你说得对。我使用的是 Fedora 发行版,为了正确运行你的脚本,我必须安装 perl-open 包,因为出现了 open.pm 未找到的错误。 - Claude
请确保您的编辑器设置为UTF-8。如果不是,内部字符串可能无法正确读取。 - shawnhcorey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接