誰かが私に RTFM を教えてくれる前に、私は言わなければなりません - 私は掘り下げました:
- 最近の Perl がデフォルトで UTF-8 を避けるのはなぜですか?
- Perl で Unicode の道を進むためのチェックリスト
- 文字列をperlで分音記号と一致させる方法は?
- 最新の perl と utf8 のデフォルトで「use My::defaults」を作成するには?
- および他の多く ( perluniintroなど) - しかし -確かに、何かを逃した
したがって、基本的なコードは次のとおりです。
use 5.014; #getting 'unicode_strings' feature
use uni::perl; #turning on many utf8 things
use Unicode::Normalize qw(NFD NFC);
use warnings;
while(<>) {
chomp;
my $data = NFD($_);
say "OK" if utf8::is_utf8($data);
}
この時点で、utf8でエンコードされた STDIN から正しい Unicode 文字列を取得しました。たとえば、"\w" はマルチバイト(おそらくそれ以上) に一致します。それは大丈夫です。$data
[\p{Alphabetic}\p{Decimal_Number}\p{Letter_Number}]
AFAIKにはutf8は含まれ$data
ていませんperl's internal Unicode
が、フォーマットされた文字列です。
今質問:
$other_data
有効な Unicode 文字列が含まれていることを確認 (テスト) するにはどうすればよいですか?- utf8::is_utf8($data) の目的は何ですか? utf8プラグマ全体が私にとって謎です。
これは、私のソース コードが utf8 であることを Perl に伝える目的のみであることを理解していuse utf8;
ます (つまり、私のスクリプトが BOM フラグで始まる場合と同様のことを行います - BigEndian の場合) - Perl の観点からは、私のソース コードは外部のようなものですfile - Perl はそれがどのエンコーディングであるかを知る必要があります...
上記の例でutf8::is_utf8($data)
は OK と出力されますが、理由がわかりません。
内部的に Perl は utf8 を使用しないため、私の utf8 データ ファイルは Perl の内部 Unicode に変換されutf8::is_utf8($data)
ます。または、名前が間違っていて、関数の名前を uni::is_unicode($data) にする必要があります???$data
明確にしていただきありがとうございます。
Ps: @brian d foy - はい、私はまだEffective Perl Programmingの本を持っていません- 私はそれを手に入れます - 私は約束します:) /冗談/