匹配Perl中的汉字

que*_*ack 1 regex perl utf-8

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

我正在编写一个用中文处理文本文件的perl程序.我想识别中文文本但排除所有其他行,如英语或其他语言和网址.我使用" 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); 
}
Run Code Online (Sandbox Code Playgroud)

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

dus*_*uff 7

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

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

否则它被读作字节串,这不是你想要的.

  • 通过添加以下内容修复了该问题:binmode STDOUT, ':utf8'; 多谢!现在一切都正常了! (2认同)