道歉,如果这是一个骗局(我尝试了各种搜索方式!)。这让我疯了......
我需要快速修复以用空格替换Ã。
我尝试过以下操作,但没有成功:
$str =~ s/Ã/ /g;
$str =~ s/\xC3/ /g;
我在这里做错了什么?
答案 0 :(得分:6)
语句“用空格替换Ô是没有意义的,因为该语句没有指定对所讨论的字符使用哪种编码。
此语句的上下文可以使用UTF-8编码,例如,以及几种ISO-8859编码之一。或者,甚至可能是UTF-16或UTF-32。
因此,对于初学者,您至少需要指定正在使用的编码。之后,还需要指定输入或输出的来源。
假设:
1)您使用的是UTF-8编码
2)您正在阅读/撰写STDIN
和STDOUT
然后,这是一个过滤器的简短示例,显示如何用空格替换此字符。当然,假设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")
。