0

我使用 utf8 打开一个 CSV 文件,然后将文件读入多维散列。一切都有效。

use Text::CSV;
.
.
.
open ($fh, '<:utf8', $input);
.
.
.

不幸的是,某些列包含我需要删除的度数符号。我已经使用正则表达式删除了其他字符,但我似乎无法弄清楚如何去除度数符号。我正在使用的其他正则表达式示例。

$sorted{$pkey}{"desc"} =~ s/\r\n//g; # strip NL from middle of value.

如何去掉度数符号或任何非标准标点符号?

提前致谢。

4

2 回答 2

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
于 2013-08-02T16:47:19.220 回答
1

不确定问题。这是一个带有度数符号的 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/;
于 2013-08-02T20:16:27.397 回答