在 Perl 中编码特殊字符
Posted
技术标签:
【中文标题】在 Perl 中编码特殊字符【英文标题】:Encoding Special Characters in Perl 【发布时间】:2021-09-26 10:03:35 【问题描述】:我有这个字符串例如:
This is an example text ã&"><£
当我在字符串上运行这个 Perl 代码时:
my($string)= @_;
$string =~ s/>//g;
$string =~ s/<//g;
$string =~ s/&/and/g;
$string =~ s/\"//g;
$string =~ s/-//;
$string =~ s/ó//;
$string =~ s/;//g;
$string =~ s/&/&/g;
$string = encode_entities($string, '<>&"');
$string = encode_utf8($string);
return $string;
我收到了这个结果:
This is an example text ã£ã£
而不是预期的:
This is an example text ã&"><£
我该如何解决?
【问题讨论】:
请出示您的完整剧本。请参阅minimal reproducible example 了解更多信息 嗨,我用完整的脚本编辑了上面的问题。那些行是: $string =~ s/>//g;删除特殊字符? 是的,您显示的代码删除了一些字符并替换了其他一些字符。我不确定你的意思? 对不起,我是 perl 新手,这不是我写的代码。只是为了理解,这行代码: $string =~ s/&/&/g;从我的字符串中删除 &? 尝试运行echo "&1&2" | perl -pE 's/&/&amp;/g'
你会看到它用“&1;&2;”替换了字符串“&1&2”
【参考方案1】:
你能试试下面的脚本吗:
use feature qw(say);
use strict;
use warnings;
use utf8;
use open qw(:std :encoding(utf-8));
use html::Entities;
my $string = 'This is an example text ã&"><£';
$string = encode_entities($string, '<>&"');
say $string;
输出:
This is an example text ã&"><£
【讨论】:
以上是关于在 Perl 中编码特殊字符的主要内容,如果未能解决你的问题,请参考以下文章