Perl Match with UTF-8

1306 ワード

Perl Match with UTF-8



perlを使用して中国語ドキュメントを処理しようとすると、一致するときは常にバグがあります.テストの結果、perlはUTF-8符号化の文字長を3と判定したようだ.漢字をasciiに分解してマッチングしたと推測されます.
しかし、長さを3倍にすると運転できるようになります.
$lines=~m/^ [ ]{6,9} /

マッチ可能
" "," " etc

テストしてみたら
print length(" ");

Output:
    12

だから符号化の問題です...


従ってutf 8-perldoc.perl.orgが増えた
use utf-8;

Do not use this pragma for anything else than telling Perl that your script is written in UTF-8.
テストしてみたら
print length(" ");

Output:
    4

しかし、テスト入力の長さは依然として間違っており、説明プログラムがファイルを読み込んだときに入力のタイプがUTF-8であるかどうかを判断できない.

ターン


それでファイルを読んで
open(instream, $file) or die ("Could not open file"); # Open the file
binmode instream, ':encoding(UTF-8)';

しかし、新聞が間違っていることに気づいた.
Wide character in print

説明出力時にUTF-8と指定されていません.
に加える
binmode STDOUT, ':encoding(UTF-8)';

後でやります.


結論:Perlは入力ファイルの符号化を自動的に判断していないようだ.プログラミング者に判断を任せることで言語の柔軟性は増すが、プログラミング者の精力を無駄にしていることが多いと思う......