Perl 为什么当我解码一些HTML实体而不是其他实体时会得到乱码输出?

Perl 为什么当我解码一些HTML实体而不是其他实体时会得到乱码输出?,perl,decode,html-entities,Perl,Decode,Html Entities,在Perl中,我尝试使用以下方法对包含数字HTML实体的字符串进行解码。有些实体可以工作,而“较新”的实体不能。例如: decode_entities('®'); # returns ® as expected decode_entities('Ω'); # returns Ω instead of Ω decode_entities('★'); # returns ★ instead of ★ 有没有办法在Perl中解码这些

在Perl中,我尝试使用以下方法对包含数字HTML实体的字符串进行解码。有些实体可以工作,而“较新”的实体不能。例如:

decode_entities('®');  # returns ® as expected
decode_entities('Ω'); # returns Ω instead of Ω
decode_entities('★'); # returns ★ instead of ★

有没有办法在Perl中解码这些“较新”的HTML实体?在PHP中,
html\u entity\u decode
函数似乎可以毫无问题地解码所有这些实体。

解码工作正常。错误的是你如何输出它们。例如,您可能已将字符串发送到某个终端,但没有先为该终端编码。这是通过以下程序中的
open
pragma实现的:

$ perl -e'
    use open ":std", ":encoding(UTF-8)";
    use HTML::Entities qw( decode_entities );
    CORE::say decode_entities($_)
       for "®", "Ω", "★";
'
®
Ω
★

解码工作正常。错误的是你如何输出它们。例如,您可能已将字符串发送到某个终端,但没有先为该终端编码。这是通过以下程序中的
open
pragma实现的:

$ perl -e'
    use open ":std", ":encoding(UTF-8)";
    use HTML::Entities qw( decode_entities );
    CORE::say decode_entities($_)
       for "®", "Ω", "★";
'
®
Ω
★

确保您的终端可以处理UTF-8编码。看起来它在多字节字符方面有问题。您还可以尝试为标准输出设置UTF-8,以防收到宽字符警告

use strict;
use warnings;
use HTML::Entities;

binmode STDOUT, ':encoding(UTF-8)';

print decode_entities('®');  # returns ®
print decode_entities('Ω'); # returns Ω
print decode_entities('★'); # returns ★

这为我提供了正确/预期的结果。

请确保您的终端能够处理UTF-8编码。看起来它在多字节字符方面有问题。您还可以尝试为标准输出设置UTF-8,以防收到宽字符警告

use strict;
use warnings;
use HTML::Entities;

binmode STDOUT, ':encoding(UTF-8)';

print decode_entities('®');  # returns ®
print decode_entities('Ω'); # returns Ω
print decode_entities('★'); # returns ★

这给了我正确的/预期的结果。

谢谢你的解释。谢谢你的解释。