我使用utf8打开一个CSV文件,然后将该文件读入多维数据哈希。 Evething有效。
use Text::CSV;
.
.
.
open ($fh, '<:utf8', $input);
.
.
.
不幸的是,有些列包含我需要剥离的度数符号。我已经使用正则表达式删除其他字符,但我似乎无法弄清楚如何去除度数符号。我正在使用的其他正则表达式的示例。
$sorted{$pkey}{"desc"} =~ s/\r\n//g; # strip NL from middle of value.
如何删除学位符号或任何非标准的标点符号?
提前致谢。
答案 0 :(得分:4)
如果使用UTF-8保存源代码,则应该能够编写
use utf8; # Tell Perl the source code is UTF-8
$sorted{$pkey}{"desc"} =~ s/°//g
你是否use utf8
,你应该能够写
use charnames ':full'; # Needed before 5.16
$sorted{$pkey}{"desc"} =~ s/\N{DEGREE SIGN}//g
答案 1 :(得分:0)
不确定问题。它是带有度数符号的UTF-8文件。你能不输入学位符号?你的电脑没有使用UTF 8吗?您使用的是与Unicode不兼容的旧版Perl吗?
度数符号的UTF-8编码为C2
B0
。如果您愿意,可以在替换中指定两个十六进制字节。这适用于本机运行UTF-8的Linux和Mac。它应该适用于Windows的默认编码:
my $string = "Man, It's hot. It must be 100° out here!";
$string =~ s/\xc2\xb0/ degrees/g;
say $string; # Prints "Man, It's hot. It must be 100 degrees out here!";
当您使用这样的UTF-8文件时非常非常小心,因为您最终可能会生成无效的字符序列。
这适用于使用UTF-8的操作系统(如果您设置了正确的代码页,Windows可以使用),您使用的是现代版本的Perl,并且该文件使用的是实际的Unicode符号:
use utf8; #MUST BE SET!!!!
$string =~ s/\N{U+00B0}/ degrees/;