Regex 如何更换࿽;与&;用perl?

Regex 如何更换࿽;与&;用perl?,regex,perl,Regex,Perl,我有一个外部窗口应用程序,它用一个包含�. 我试图检测每个这样的实例,并用一个&替换它 我尝试使用所有这些,但没有任何效果: $line =~ s/\uFFFD/&/g; $line =~ s/&#65533/&/g; $line =~ s/\x{fffd}/&/g; $line =~ s/\xfffd/&/g; 正如ikegami在他们的评论中指出的那样,第三种解决方案($line=~s/\x{fffd}/&/g;)是正确的。如果它不起作用,你的一个假

我有一个外部窗口应用程序,它用一个包含�. 我试图检测每个这样的实例,并用一个&替换它

我尝试使用所有这些,但没有任何效果:

$line =~ s/\uFFFD/&/g;
$line =~ s/&#65533/&/g;
$line =~ s/\x{fffd}/&/g;
$line =~ s/\xfffd/&/g;

正如ikegami在他们的评论中指出的那样,第三种解决方案(
$line=~s/\x{fffd}/&/g;
)是正确的。如果它不起作用,你的一个假设肯定是错误的。我想到了两种可能性:

  • 您的输入不包含实际值。编辑器可能会以相同的方式呈现另一个字节序列。您可以通过运行
    hextump-c
    来检查它。如果您的输入是用UTF-8编码的(注意UTF8和Unicode之间的区别),您应该看到以下顺序:
    357275
  • 您没有将输入文本编码告知perl。Perl假定它是单字节编码,因此包含多字节字符的正则表达式永远不会匹配。请比较以下各项:

    回声'�' | perl-pe的/\x{fffd}/&'

    回声'�' | perl-CS-pe的/\x{fffd}/&'

    &


请提供
use Data::Dumper的输出;{local$Data::Dumper::Useqq=1;warn(Dumper($str));}
如果有字符FFFD,第三个就可以了。@Pedro Lobito,该字符用于表示无效的内容。在源代码中添加无效内容是一个糟糕的选择。@ikegami,我理解这一点,但我无法在windows应用程序中更改任何内容。我使用了Data::Dumper,作为字符串的一部分,我得到了这个\\302\\201。因此,如果我应用“s/\x81/&/g”,我会得到�&". 我怎样才能摆脱它� 还是\\302?