如何使用perl替换空间

时间:2015-03-21 02:51:28

标签: perl

道歉,如果这是一个骗局(我尝试了各种搜索方式!)。这让我疯了......

我需要快速修复以用空格替换Ã。

我尝试过以下操作,但没有成功:

$str =~ s/Ã/ /g;
$str =~ s/\xC3/ /g;

我在这里做错了什么?

2 个答案:

答案 0 :(得分:6)

语句“用空格替换Ô是没有意义的,因为该语句没有指定对所讨论的字符使用哪种编码。

此语句的上下文可以使用UTF-8编码,例如,以及几种ISO-8859编码之一。或者,甚至可能是UTF-16或UTF-32。

因此,对于初学者,您至少需要指定正在使用的编码。之后,还需要指定输入或输出的来源。

假设:

1)您使用的是UTF-8编码

2)您正在阅读/撰写STDINSTDOUT

然后,这是一个过滤器的简短示例,显示如何用空格替换此字符。当然,假设Perl脚本本身也以UTF-8编码。

use utf8;
use feature 'unicode_strings';

binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");

while (<STDIN>)
{
    s/Ã/ /g;
    print;
}

答案 1 :(得分:0)

您需要指定您想要UNICODE而不是Latin-1(或其他编码)。 如果你正在阅读文件,那么:

#!/usr/bin/perl
open INFILE, '<:encoding(UTF-8)', '/mypath/file';
while(<INFILE>) {
    s/\xc3/ /g;
    print;
}

我会更好地为你打破这个:

<:encoding(UTF-8)中,您指定要读取(&lt;),并且您想要 UNICODE :encoding(UTF-8)部分)。 如果你没有使用unicode,你会使用:

open INFILE, '<', '/mypath/file';

open INFILE, '/mypath/file';

因为默认情况下会读取perl。如果你想写你使用>:encoding(UTF-8),如果你想追加(因为>覆盖文件)你使用>>:encoding(UTF-8)。 希望它有所帮助!

如果您尝试从STDIN进行解码,还有另一个答案指定如何binmode(STDIN, ":utf8")