Perl 为什么当我解码一些HTML实体而不是其他实体时会得到乱码输出?
在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中解码这些
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 ★
这给了我正确的/预期的结果。谢谢你的解释。谢谢你的解释。