Looking for perl Answers? Try Ask4KnowledgeBase
Looking for perl Keywords? Try Ask4Keywords

Perl LanguageUnicode


備考

ファイル名エンコーディングに関する警告


ファイル名エンコーディングは、 プラットフォーム特有のものではなく、 ファイルシステム特有のものであることにも言及する価値があります

あるファイル名をエンコードして書き込むことができるという理由だけで、同じファイル名を読み込みしようとしたときにも同じことが起きると想定することは、決して完全に安全ではありません。

たとえば、UnicodeをサポートしていないFAT16などのファイルシステムに書き込む場合、ファイル名は暗黙のうちにASCII互換の形式に変換されます。

しかし、それは他の呼び出しによって照会すると、同じことを呼ばれます例えば、読み、明示的な名前付けによってへの書き込み、ファイルが作成できることを前提としても、 あまり安全であるreaddirあなたがして、指定よりも、あなたのファイル名に別のバイトを返すことがありますopen

VAXのようないくつかのシステムでは、OSによってファイル拡張子が変更される可能性があるので、 readdirfoo.barようなファイル名に対してopenで指定したのと同じファイル名を返すと常に考えることさえできません。

また、UNIXでは、 /\0だけを除いて、OSが許すファイル名には、非常に自由な一連の合法的な文字があります.Windowsでは、ファイル名で禁止されている特定の文字の範囲があり、

ここでは十分な注意を払ってください。もしあなたが選択肢があるならば、ファイル名での巧妙なトリックを避けてください 。そして、常にあなた使っている巧妙な技が一貫していることを確認するテストがあります。

CPAN向けのコードを記述している場合など、コントロール外のプラットフォームで実行されるコードを書く場合は、 2倍の注意を払ってください。ユーザーベースの少なくとも5%は、選択、事故、またはコントロール外の権限によって、古代または壊れたテクノロジーが発生し、それらがバグを作成するために共謀することになります。

:エンコード(utf8)対utf8


UTF-8はPerlで文字列を表現するための内部形式の1つであるため、エンコード/デコードのステップをスキップすることがよくあります。 :encoding(utf-8)代わりに、あなたのデータが既にUTF-8である場合は:utf8使うだけでよいの:utf8:utf8は出力ストリームでは安全に使用できますが、入力ストリームでは無効なバイトシーケンスがあると内部の不整合が発生するため危険です。また、 :utf8を入力に使用するとセキュリティ違反が発生する可能性があるため、 :encoding(utf-8)が推奨されます。

詳細:エンコーディングと:utf8の違いは何ですか?

UTF-8対utf8対UTF8


Perl v5.8.7"UTF-8" (ダッシュ付き)は、厳密でセキュリティに配慮した形式のUTF-8を意味します。一方、 "utf8"は自由で自由な形式のUTF-8を意味します。

例えば、 "utf8"0xFFFFFFFFようにUnicodeに存在しないコードポイントに使用できます。これに対応して、 "\x{FE}\x{83}\x{BF}\x{BF}\x{BF}\x{BF}\x{BF}"ような無効なUTF-8バイトシーケンスは、無効なユニコード(しかし、有効なPerlの)コードポイント( 0xFFFFFFFF )使用して"utf8" 、一方で"UTF-8"エンコーディングが有効なUnicodeの範囲外のコードポイントにデコードすることができないだろうし、あなたの置換文字(与えるだろう0xFFFD代わりに)。

コード名は大文字小文字を区別しないので、 "UTF8"同じである"utf8" (すなわち、 非厳密変異体)。

詳細: UTF-8対UTF8対UTF8

もっと読む


PerlのUnicode処理の詳細は、次のソースで詳しく説明されています。

stackoverflow.comからの投稿(警告:最新のものではない可能性があります):

ユーチューブの動画:

Unicode 関連する例