1

私は 1 日以上戦っており、Google にはこの問題を解決するための多くのリクエストがありましたが、結果はありませんでした。:(

実際には、名前のリストでエンコードされたUTF8テキストファイルを読み取る次のコードがあり、特定の名前が見つかるとperlスクリプトが停止するはずです。これらの名前はフランス語で付けられ、多くの場合アクセントがあります。それが予期しない動作を開始するときです。

コードは次のとおりです。

#!/usr/bin/perl
$ErrorWordFile = "./myFile.txt";
open FILEcorpus, $ErrorWordFile or die $!;

 while (<FILEcorpus>) 
 {
    chomp;
    $_=~  s/\r|\n//g;
    $normWord=$_;       
        $string="stéphane";

        if( $normWord eq  $string )
        {
          print"\nYES!! does work";

        }
        else
        {
          print"\nNO does NOT work";
        }
}

close(FILEcorpus)

実際、コーパス ファイル (./myFile.txt) には、文字として "stéphane\n" のみが含まれています。

これは明らかに、ファイルの UTF8 エンコーディングとアクセントに由来しますが、明らかにそれほど簡単ではありません。私は以下を含む多くのものを試しました

use uft8

また

utf8::decode($normWord); without results

成功せずに:(

何か案が???

あなたの貴重な助けに感謝します!

サイモン

4

3 に答える 3

3

これを試して。

#!/usr/bin/perl
use strict;
use warnings;
use utf8;  # This is needed because of the literal "stéphane" in the below code

my $ErrorWordFile = "./myFile.txt";
open my $FILEcorpus, '<:utf8', $ErrorWordFile or die $!;

while ( my $normWord = <$FILEcorpus> ) {
    chomp $normWord;
    $normWord =~ s/\r|\n//g;
    my $string = "stéphane";

    if ( $normWord eq $string ) {
        print "YES!! does work\n";
    }
    else {
        print "NO does NOT work\n";
    }
}

close $FILEcorpus;

読み取り元のファイルが UTF-8 であり、比較対象の文字列が UTF-8 であることを Perl に伝える必要があります。

于 2013-07-11T17:03:52.030 に答える