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
は入力ファイルの符号化を自動的に判断していないようだ.プログラミング者に判断を任せることで言語の柔軟性は増すが、プログラミング者の精力を無駄にしていることが多いと思う......
$lines=~m/^ [ ]{6,9} /
" "," " etc
print length(" ");
Output:
12
use utf-8;
print length(" ");
Output:
4
open(instream, $file) or die ("Could not open file"); # Open the file
binmode instream, ':encoding(UTF-8)';
Wide character in print
binmode STDOUT, ':encoding(UTF-8)';