値が一連のバイトまたはエンコードされた文字列であるかどうかを判断するPerlの標準テストは何ですか? また、それがエンコードされた文字列である場合、それはどの文字エンコードですか?
次の完全な Perl スクリプトがあるとします。
'foo';
このリテラル文字列が一連のバイトなのか、エンコーディングの文字列なのかをどのように判断しますか? また、ある文字エンコーディングの文字列である場合、それはどの文字エンコーディングですか?
この質問は、Unicode や UTF-8 に関するものではありません。これは、一般的に Perl のバイト対文字に関するものです。この質問は、完全に別のトピックである自動文字エンコーディング検出に関するものでもありません。
アップデート
を初期化した後$letter
、変数に格納されている文字がどの文字エンコーディングであると Perl が判断したかを Perl に教えてもらいたいのですが、それが必ずしも正しい$letter
とは思いません。文字がどの文字エンコーディングに含まれているかを Perl が確実に理解できるようにするのは、プログラマーとしての私の責任です。わかりました。しかし、Perl が文字 (または文字列) を認識している文字エンコーディングをテストする単純で簡単な方法があるはずです。ありませんか?
C:\>perl -E "$letter = 'Ž'; say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>perl -MEncode -E "$letter = decode('UTF-8', 'Ž'); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>perl -MEncode -E "$letter = decode('Windows-1252', 'Ž'); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
matches
C:\>perl -MEncode -E "$letter = decode('Windows-1252', 'Ž'); $letter = encode('Windows-1252', $letter); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>chcp
Active code page: 1252
C:\>
Perlは、格納された値が (正しいか間違っているかに関わらず)理解$letter
している文字エンコーディングをオンデマンドで報告できませんか?