Как сопоставить китайский иероглиф, используя регулярное выражение Perl - PullRequest
2 голосов
/ 23 декабря 2009

Мне нужно сопоставить некоторые китайские символы в HTML-кодировке utf8, и я написал тестовый код, как показано ниже:

#! /usr/bin/perl

use strict;
use LWP::UserAgent;
use Encode;

my $ua = new LWP::UserAgent;

my $request = HTTP::Request->new('GET');
my $url = 'http://www.boc.cn/sourcedb/whpj/';
$request->url($url);

my $res = $ua->request($request) ;

my $str_chinese =   encode("utf8" ,"英磅" ) ;  
# my $str_chinese = "英磅" ;


my $str_english = "English" ;
#my $html = decode("utf8" , $res->content) ;
my $html = $res->content ; 

if ( $html =~ /$str_chinese/ ) {
     print "chinese word matched" ;
}else {
     print "chinese word unmatched\n" ;
}

if ( $html =~ /$str_english/i ) {
    print "english word matched\n" ;
}else {
    print "english word unmatched\n" ;
}

Вывод показывает, что скрипт не соответствует существующим китайским символам, вставленным в html. Не могли бы вы дать мне подсказку, как решить мою проблему?

Ответы [ 3 ]

7 голосов
/ 23 декабря 2009

Поскольку вы добавили символы UTF-8 в исходный код, вам необходимо:

use utf8;

Он сообщает Perl, что ваш скрипт написан на UTF-8.

4 голосов
/ 23 декабря 2009

Я запускаю ваш код, и китайские символы не совпадают.

Затем я проверяю HTML, он не содержит эти символы. Так что это может быть причиной несовпадения дела. Затем я попробовал другой символ (other), а также удалил функцию кодирования. т.е. my $str_chinese = "联";

Запустите код с этим изменением, и символ совпадет.

3 голосов
/ 23 декабря 2009

Вместо этого следует использовать метод decoded_content из класса HTTP::Message. Ручное декодирование не требуется.

#!/usr/bin/env perl
use utf8;
use strict;
use LWP::UserAgent;

my $html = LWP::UserAgent->new
    ->get('http://www.boc.cn/sourcedb/whpj/')
    ->decoded_content;

my $str_chinese = '首页';
my $str_english = 'English';

if ($html =~ /$str_chinese/) {
    print "chinese word matched\n";
} else {
    print "chinese word unmatched\n";
}

if ($html =~ /$str_english/i) {
    print "english word matched\n";
} else {
    print "english word unmatched\n";
}

Выход:

chinese word matched
english word matched
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...