a7o*_*ton 5 perl character-encoding
我在任何地方都尝试过学习并设法解决这个问题,但是我什么也没得到。
让我们取一个字符串:
蛋白杏仁饼干甜点松饼。糖李子饼干杏仁饼蛋奶酥棒棒糖糖果布朗尼提拉米苏牛角包。威化饼干冰淇淋巧克力软糖。芝士蛋糕粉chupa chups。甜甜圈糕点糖果手杖。甘草软糖卷糖果棒果冻-o。芝麻snap花糖梅蛋糕苹果派。巧克力冰淇淋棉花糖蛋奶酥。苹果派丹麦菜unerdwear.com薄饼unerdwear.com松饼涂抹布丁。果冻棉花糖布朗尼棒棒糖蛋白杏仁饼干甜卷胡萝卜蛋糕巧克力棒。酸的棒棒糖饼干unerdwear.com软糖粉。果冻酥糖苹果派布丁焦糖小杏仁饼。小杏仁饼果冻-O型浇头派粉糖衣。软糖果冻o提拉米苏熊爪布朗尼芝士蛋糕。糖霜燕麦蛋糕棒棒糖胡萝卜蛋糕太妃糖。甜甜圈果冻糖梅花松饼。水果蛋糕提拉米苏枣松饼蛋j果冻派水果蛋糕。Unerdwear.com枣unerdwear.com gummi熊软糖布朗尼杏仁饼。小杏仁饼酥糖蛋糕tootsie卷棉花糖棉花糖甜甜圈。Soufflé威化棒棒糖胡萝卜糕。芝士蛋糕松饼粉软糖胡萝卜蛋糕。酥油冰淇淋应用甘草杏仁饼苹果派蛋糕。蛋糕糖衣甘草。糖李子饼干酥糖。胡萝卜糕棒棒糖甜糖果。糖果棒小杏仁饼棉花糖丹麦蛋糕果冻-o布朗尼饼干燕麦蛋糕。蛋糕糖衣甘草。糖李子饼干酥糖。胡萝卜糕棒棒糖甜糖果。糖果棒小杏仁饼棉花糖丹麦蛋糕果冻-o布朗尼饼干燕麦蛋糕。蛋糕糖衣甘草。糖李子饼干酥糖。胡萝卜糕棒棒糖甜糖果。糖果棒小杏仁饼棉花糖丹麦蛋糕果冻-o布朗尼饼干燕麦蛋糕。
当我做:
Encode::encode('UTF-8', $text);
Run Code Online (Sandbox Code Playgroud)
在该字符串上,单词Soufflé被编码为Soufflé。
当我看到它时,我不会将其识别为任何代码点或任何有效的编码映射(即é)。我如何期望它以正确读取的方式到达目的地?换句话说,当我将Perl编码为UTF8时,为什么Perl会给我é é?
xmlbody($text);
sub xmlbody {
$description = shift;
use XML::Writer;
my $writer = XML::Writer->new( OUTPUT => 'self', ENCODING => 'utf-8' );
my $writer->xmlDecl('utf-8');
## ...structure
$writer->cdataElement('description',$description);
## ...more structure
$writer->end();
}
Run Code Online (Sandbox Code Playgroud)
use utf8;似乎没有在上述字符串中编码特殊字符,它仍然给出“Ô。因为我没有使用filehandle或stdin / stdout,所以会$writer->xmlDecl('utf-8')等同于use open qw(:std :utf8)吗?
\n\n\n当我查看此内容时,我不认为它是任何代码点或任何有效的编码映射
\n
如果您查看fileformat.info 上的相关页面,您就会看到发生了什么。
\n\n最初,在您的程序中有一个 Unicode 字符“\xc3\xa9”。其 Unicode 字符代码为 U+00E9。当将该字符编码为 UTF-8 时,您会得到一个由两个字节组成的字符 - 0xC3 0xA9。如果您查看ISO-8859-1 的代码页,您会看到 0xC3 是“\xc3\x83”,0xA9 是“\xc2\xa9”。
\n\n如果您尝试在理解 UTF-8 且需要 UTF-8 的设备上显示该两字节字符,那么您将得到“\xc3\xa9”。否则,设备将使用其本机字符编码(可能是 ISO-8859-1),您将获得您所看到的Mojibake 。
\n\n正如tchrist 所说,处理这个问题的最简单方法是使用 Perl 的工具来处理它,而无需您考虑它。
\n| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |