我有一个ISO-8859-1编码的HTML字符串。我需要将此字符串传递给HTML:Entities :: decode_entities(),用于将一些HTML ASCII代码转换为相应的字符。所以我使用模块HTML :: Parser :: Entities 3.65但是在decode_entities()操作之后我的整个字符串变为utf-8字符串。这种行为似乎很好,因为HTML :: Parse的文档。因为我需要这个字符串以ISO-8859-1格式进行进一步处理所以我使用Encode :: encode(“iso-8859-1”,$ str)将字符串更改回ISO-8859-1编码。 我的结果很好,除了一些字符,一个问号即将到来。一个例子是单引号'ASCII码(')
如果Encode模块有任何限制,有人可以帮助我吗?任何其他指针也将有助于解决问题。 我粘贴了导致问题的char的示例文本:
my $str = "This is a test string to test the encoding of some chars like ’ “ ” etc these are failing to encode; some of them which encode correctly are é « etc.";
由于
答案 0 :(得分:2)
有third argument to encode
,它控制着它的检查。默认设置是使用替换字符,但您可以将其设置为FB_CROAK以获取错误消息。
答案 1 :(得分:1)
根本问题是’
,“
和”
所代表的字符在ISO-8859-1中不存在。你必须决定你想用它们做什么。
一些可能性:
使用cp1252,Microsoft的ISO-8859-1的“扩展”版本,而不是真实的东西。它确实包括那些角色。
在从utf-8转换为ISO-8859-1之前,重新编码ISO-8859-1范围之外的实体(加&
):
my $toEncode = do { no warnings 'utf8'; "&\x{0100}-\x{10FFFF}" };
$string = HTML::Entities::encode_entities($string, $toEncode);
(需要no warnings
位,因为尚未实际分配U + 10FFFF。)
还有其他可能性。这实际上取决于你想要完成的事情。