Perl-将utf-8字符转换为连字符-将utf-8作为单个字符读取
我是perl新手。我需要将字符串中的UTF-8字符转换为连字符(-) 但我编写的下面的程序将UTF-8字符作为两个单独的字节读取,并将输出作为“10--at--25--Disco” 但这个特殊的第四个字符串列只有14个字符的固定长度,所以额外的连字符会造成问题Perl-将utf-8字符转换为连字符-将utf-8作为单个字符读取,perl,utf-8,ascii,non-ascii-characters,Perl,Utf 8,Ascii,Non Ascii Characters,我是perl新手。我需要将字符串中的UTF-8字符转换为连字符(-) 但我编写的下面的程序将UTF-8字符作为两个单独的字节读取,并将输出作为“10--at--25--Disco” 但这个特殊的第四个字符串列只有14个字符的固定长度,所以额外的连字符会造成问题 有人能给我一些关于如何将UTF-8字符作为单个字符读取的线索吗?您需要的主要内容是perl-CSD。有了它,脚本就可以像 perl -CSD -pe 's/[^\x00-\x7F]/-/g' 有关选项的讨论,请参阅;但简而言之,-CS意
有人能给我一些关于如何将UTF-8字符作为单个字符读取的线索吗?您需要的主要内容是
perl-CSD
。有了它,脚本就可以像
perl -CSD -pe 's/[^\x00-\x7F]/-/g'
有关选项的讨论,请参阅;但简而言之,
-CS
意味着STDIN
,STDOUT
和STDERR
在UTF-8中;而-CD
意味着UTF-8是输入和输出流的默认PerlIO层。(此脚本仅使用STDIN
和STDOUT
,因此D
不是绝对必要的;但是如果您只学习了一种魔法咒语,请学习-CSD
)谢谢它的使用。你的一行代码也很有用。我今天在perl中学到了一些新东西:)使用open:std',':encoding(UTF-8)代码>
[root@ cdr]# cat ../asciifilter.pl
#!/usr/bin/perl
use strict;
use Encode;
my @chars;
my $character;
my $num;
while(my $row = <>) {
@chars = split(//,$row);
foreach $character (@chars) {
$num = ord($character);
if($num < 127) {
print $character;
} else {
print "-";
}
}
}
[root@MAVBGL-351L cdr]# echo "IVM IST 20150324095652 31610150096 10ÑatÑ25ÑDisco 0000000091" | ../asciifilter.pl
IVM IST 20150324095652 31610150096 10--at--25--Disco 0000000091
perl -CSD -pe 's/[^\x00-\x7F]/-/g'