1

我知道以前有人问过这个问题。我确实检查了所有以前的答案,但仍然无法解决我的问题。请原谅我显然重复的问题。

我正在编写一个 perl 程序来处理中文文本文件。我想识别中文文本,但排除所有其他行,例如英语或其他语言和 url。我使用 " use utf8" 和 " $line =~ /(\p{Han}+)/" 但它什么也没做。如果我使用“ use utf8”和“ $line =~ /信息/”,它什么也不做。如果我不使用“ use utf8”,“ $line =~ /信息/”可以工作,但不能“ $line =~ /(\p{Han}+)/”。我检查文本文件编码:file -bi input.txt,它显示:“ text/plain; charset=utf-8”。以下是代码:

$|=1;
use strict;
use utf8;

my $in = $ARGV[0];

sub main {

    open(IN, "$in") or die "can't open $in\n";

    while (my $line=<IN>) {
        chomp($line);

        if ($line =~ /(\p{Han}+)/ ) { 
        print "chinese: $line\n";
        }

        if ($line =~ /信息/) {
           print "$line\n";
        }

    } # end while

   close(IN); 
}

提前感谢您的任何帮助和建议!

4

2 回答 2

7

您需要以 UTF-8 格式打开文件:

open IN, "<:encoding(UTF-8)", $in or die "can't open $in\n";

否则它将被读取为字节字符串,这不是您想要的。

于 2013-06-23T05:53:12.120 回答
-2

如果您希望正则表达式引擎将您的字符串视为 unicode 字符串,则必须使用 u 修饰符:

/(\p{Han}+)/u
于 2013-06-23T05:49:27.483 回答