字符编码问题,无法使用PERL API解码HTML实体

Cod*_*Fun 0 perl decoding html-entities

我现在对编码方案感到疯狂.我将在下面陈述我的问题,请提供您的意见.

问题:我有一些输入字符串,如下面的代码所示.最终所需的输出是"Křižovnická190".[你可以在这里解码].我正在使用perl模块来解码这些字符串.以下是我的测试代码:

use HTML::Entities;
binmode STDOUT,":utf8";
$a = "Křižovnická 190";
decode_entities($a);
print $a."\n";
Run Code Online (Sandbox Code Playgroud)

然而输出,我得到的是"Křiovnická19",这意味着"ř"被正确解码,但"ž"不是.我的问题是为什么?然后我尝试了"_decode_entities"方法,我们提供了entity2char哈希,但仍然没有成功.

PS:我必须在这里使用Perl,因为其他遗留API,请在这里帮助我

cho*_*oba 7

字符"ž"对应ž于Unicode,而不是ž.158是cp1252中"ž"的编码.

顺便说一句,Clementinum很好.

为清楚起见:

| Grapheme   |         ?         |         ž         |
|------------+-------------------+-------------------|
| Codepoint  | U+0159 (345)      | U+017E (382)      |
| Escape     | ř (ř) | ž (ž) |
|------------+-------------------+-------------------|
| UTF-8      | C5 99 (197 153)   | C5 BE (197 190)   | 
| cp1252     | -                 | 9E    (158)       |
| latin2     | F8    (248)       | BE    (190)       |
Run Code Online (Sandbox Code Playgroud)

更新:

有关详细信息,请参阅Wikipedia上的HTML十进制字符渲染.重要的是:

(...)对字符128-159的引用通常由宽松的Web浏览器解释,就好像它们是对Windows-1252字符编码中分配给字节128-159(十进制)的字符的引用一样.这违反了HTML和SGML标准,并且字符已经分配给更高的代码点,因此HTML文档作者应该始终使用更高的代码点.例如,对于商标(TM),请使用™,而不是™.