Perl - 将 utf-8 字符转换为连字符 - 将 utf-8 读取为单个字符
Perl - Convert utf-8 char to hyphen - read utf-8 as single char
我是 perl 新手。我有一个要求,我必须将字符串中的 UTF-8 字符转换为连字符 (-)。
Input string - "IVM IST 20150324095652 31610150096 10ÑatÑ25ÑDisco 0000000091"
Expected output - "IVM IST 20150324095652 31610150096 10-at-25-Disco 0000000091".
但我编写的以下程序将 UTF-8 字符读取为两个单独的字节,并将输出作为“10--at--25--Disco”
[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
但是这个特定的第 4 个字符串列的长度固定为 14 个字符only.So,额外的连字符会产生问题。
谁能给我一些关于如何将 UTF-8 字符读取为单个字符的线索?
你主要需要的是perl -CSD
。这样,脚本就可以简单到
perl -CSD -pe 's/[^\x00-\x7F]/-/g'
有关选项的讨论,请参阅 man perlrun;但简而言之,-CS
表示 STDIN
、STDOUT
和 STDERR
为 UTF-8; -CD
表示 UTF-8 是输入和输出流的默认 PerlIO 层。 (此脚本仅使用 STDIN
和 STDOUT
,因此 D
不是绝对必要的;但如果您只学习一种魔法咒语,请学习 -CSD
。)
我是 perl 新手。我有一个要求,我必须将字符串中的 UTF-8 字符转换为连字符 (-)。
Input string - "IVM IST 20150324095652 31610150096 10ÑatÑ25ÑDisco 0000000091"
Expected output - "IVM IST 20150324095652 31610150096 10-at-25-Disco 0000000091".
但我编写的以下程序将 UTF-8 字符读取为两个单独的字节,并将输出作为“10--at--25--Disco”
[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
但是这个特定的第 4 个字符串列的长度固定为 14 个字符only.So,额外的连字符会产生问题。
谁能给我一些关于如何将 UTF-8 字符读取为单个字符的线索?
你主要需要的是perl -CSD
。这样,脚本就可以简单到
perl -CSD -pe 's/[^\x00-\x7F]/-/g'
有关选项的讨论,请参阅 man perlrun;但简而言之,-CS
表示 STDIN
、STDOUT
和 STDERR
为 UTF-8; -CD
表示 UTF-8 是输入和输出流的默认 PerlIO 层。 (此脚本仅使用 STDIN
和 STDOUT
,因此 D
不是绝对必要的;但如果您只学习一种魔法咒语,请学习 -CSD
。)