首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用perl将重音字符和其他外文字符编码为UTF8

如何用perl将重音字符和其他外文字符编码为UTF8
EN

Stack Overflow用户
提问于 2014-07-13 13:12:41
回答 1查看 1.9K关注 0票数 5

我在任何地方都试着去学习和思考这个问题,但我什么也没有得到。

让我们取一个字符串:

马卡龙甜点松饼。糖李子曲奇马卡龙苏弗莱棒棒糖布朗尼提拉米苏牛角面包。晶片冰淇淋巧克力棒胶。芝士蛋糕粉朱帕巧克力。甜甜圈糕点糖果棒。甘草糖卷糖果棒果冻。芝麻撕扯,撒糖,李子,蛋糕,苹果派。巧克力冰淇淋,棉花糖,苏弗莱。苹果派丹麦unerdwear.com晶片unerdwear.com松饼应用布丁。果冻,棉花糖,布朗尼,棒棒糖,马卡色,甜卷,胡萝卜蛋糕,巧克力棒。塔特棒棒糖曲奇unerdwear.com胶粉。果冻,苹果派,布丁,焦糖,杏仁。杏仁果冻-o配料派粉结冰。土豆泥,果冻,提拉米苏熊爪,布朗尼芝士蛋糕。糖派燕麦蛋糕棒棒糖胡萝卜蛋糕太妃糖。甜甜圈果冻糖李子松饼。水果蛋糕,提拉米苏,月饼,松饼,馅饼,果冻,水果蛋糕。红枣( Unerdwear.com jujubes unerdwear.com gummi )有果冻豆、褐麦角豆。杏仁饼,盐饼,糖果卷,棉花糖,棉花糖,甜甜圈。松糕糖果棒胡萝卜蛋糕。芝士蛋糕松饼粉胶胡萝卜蛋糕。阿尔瓦冰淇淋涂甘草马卡龙苹果派蛋糕。蛋糕拖甘草。糖梅饼干卤汁。胡萝卜蛋糕糖果棒甜糖果。糖棒,杏仁,棉花糖,丹麦蛋糕,果冻,巧克力饼干,燕麦蛋糕。

当我这么做时:

代码语言:javascript
复制
Encode::encode('UTF-8', $text);

在这个字符串中,Soufflé被编码为Souffl(圣保罗)。

当我看到这一点时,我不认为它是任何代码点或任何有效的编码映射(即é)。我怎么能指望它以一种能被正确阅读的方式到达它的目的地呢?换句话说,为什么Perl在我将它编码为UTF8而它应该给我é的情况下给了我c?

代码语言:javascript
复制
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();
}

use utf8;似乎没有对上面提到的字符串中的特殊字符进行编码,它仍然给出了“c”。$writer->xmlDecl('utf-8')是否等同于use open qw(:std :utf8),因为我没有使用文件句柄或stdin/stdout?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-14 09:55:22

当我看这个时,我不认为它是任何代码点或任何有效的编码映射

如果您查看fileformat.info的相关页面,您将看到正在发生的事情。

最初,在您的程序中,您有一个Unicode字符"é“。它的Unicode字符代码是U+00E9。当您将该字符编码为UTF-8时,您将得到一个由两个字节组成的字符- 0xC3 0xA9。如果您查看ISO-8859-1的代码页,您将看到0xC3为“圣保罗”,0xA9为“C”。

如果你试图在一个能理解UTF-8并期待UTF-8的设备上显示这个两个字节的字符,那么你就会得到"é“。否则,设备将使用其本机字符编码(可能是ISO8859-1),您将得到您所见过的莫吉贝克

作为克里斯特说,处理这个问题的最简单方法是使用Perl的工具来处理它,而不必考虑它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24723053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档