でASCII文字しか書いていませんHello\n
。幸いなことに、ASCII は依然として完全に有効な UTF-8 です。ただし、エディタによる自動検出では、ファイル コンテンツのエンコーディングを判断するものが何もないため、エンコーディングとして UTF-8 が表示されない可能性が高くなります。ファイルエンコーディングがどのように機能するかを知らないだけだと思います。
ファイルのエンコーディングは、一般に、ファイル内またはファイルと一緒に外部的に保存されないプロパティです。多くのエディターは、実行しているオペレーティング システムまたは環境設定 (システム言語) に基づいて特定のエンコーディングを単純に想定するか、何らかのセミインテリジェントな自動検出機能を組み込んでいます (ファイル エンコーディングを自動検出できないため、それでも失敗する可能性があります)。明確に検出されます)。binmode
そのため、または対応する I/O 層でファイルを読み取るときに、ファイルが UTF-8 でエンコードされていることを Perl に伝える必要があります。
エンコーディングが UTF ファミリー (UTF-8、UTF-16 LE および BE、UTF-32 LE および BE) の 1 つである場合、テキスト ファイルのエンコーディングをマークする方法が 1 つあります。その方法はBOM (バイト オーダー マーク)と呼ばれます。ただし、BOM 付きのファイルの作成は、UTF-8 が今日ほど広く普及していなかった時代に始まりました。通常、特にエディターやアプリケーションが一般的に BOM をまったくサポートしていないため、解決できるよりも多くの異なる問題を引き起こします。したがって、今日では BOM はおそらく避けるべきです。
もちろん、ファイルのエンコーディングを示す特定の指示がファイル形式に含まれている例外もあります。XML はそのDOCTYPE
宣言で頭に浮かびます。DOCTYPE
ただし、そのようなファイルの場合でも、ファイルの宣言を解析するために、ファイルが常に 1 文字あたり少なくとも 2 バイトを使用するマルチバイト エンコーディング (UTF-16/UTF-32) でエンコードされているかどうかを認識する必要があります。最初の場所。それは単に単純ではありません;)