Windows 7 UTF-8およびUnicode


14

Windows 7(Pro 64ビット)の変更点について誰か説明していただけますか?

詳細:以前は、Windows XPがあり、CSV形式の翻訳ファイル(UTF-8エンコード)がいくつかありました。メモ帳とExcelの両方でフォントを表示できました。Windows 7にアップグレードした後、これらのファイルを開くと、四角いボックスが表示されます(ブラウザーで開くと、すべての翻訳が表示されます)。これらのファイルをUnicodeで保存すると、すべてがうまくいくようです。

それで、正確に何が起こっているのでしょうか?Windows 7がUTF-8ではなくUnicodeで動作するのはなぜですか?

回答:


30

Windows 7がUTF-8ではなくUnicodeで動作するのはなぜですか?

用語

UnicodeUTF-8は同じ種類のものではありません。Unicodeは文字セット(レパートリー)を定義し、それらの各文字に番号(コードポイント)を割り当てる文字セットです。UTF‑8は、ディスク上または送信中のUnicode文字のストリームを表すために使用できるいくつかのエンコーディングの 1つです。Unicode文字の同じストリームは、たとえばUTF‑16、UTF‑32またはUTF‑7としてエンコードすることもできます。

しかし、メモ帳はあなたが含むオプション「をコード」提供していますANSIUnicodeUnicode big-endianUTF-8。これを書いたマイクロソフトの開発者は、間違った用語を使用しています。「Unicode」と言うとき、「UTF-16 リトルエンディアン」を意味する可能性が高いです。「ANSI」と言うときは、コードページ1252(CP-1252)を意味します

Microsoftメモ帳

Microsoftのメモ帳は、バイトオーダーマーク(BOM)を使用してUTF-16を書き込み、メモ帳はテキストファイルを読み取るときにBOMを検索すると考えています。BOMは、ファイルがUTF-16であることをアプリに通知し、ビッグエンディアンかリトルエンディアンかを示します。

NotepadがBOMを見つけられない場合、ライブラリ関数を呼び出しますIsTextUnicode。この関数はデータを調べ、使用されたエンコードを推測しようとします。時々(必然的に)誤った推測をします。「ANSI」ファイルが「Unicode」であると推測される場合があります。UTF-16またはUTF-8ファイルをコードページ1252として解釈しようとすると、間違ったグリフが表示され、8ビット値を表示するグリフを見つけることができなくなります。これらは正方形として表示されます。

harrymcが答えで述べているようにメモ帳に代わるより良い選択肢があります。ただし、メモ帳を使用すると、ファイルを開くときにエンコードを明示的に選択できます(メモ帳から推測しようとするのではなく)。

バイトオーダーマーク

Unicodeコンソーシアムによると、バイトオーダーマーク(BOM)はオプションです。ただし、Windowsは一部のエンコーディングを区別するためにBOMに依存しています。

要するに、何らかの理由でファイルにBOMが欠けていたのでしょうか?アップグレードプロセス中にBOMが失われた可能性がありますか?

正方形として表示される元のファイルがまだある場合は、それらの16進ダンプを作成して、BOMが含まれているかどうかを確認できます。


プレーンテキストファイルの標準

問題は、事実上何もないということです。プレーンテキストファイルの普遍的な標準はありません。代わりに、多くの非互換性と未知のものがあります。

  • 行末はどのようにマークされていますか?プラットフォームによっては、改行文字(LF)が後に続く制御文字の復帰(CR)を使用するものもあれば、CRのみを使用するものとLFのみを使用するものもあります。

  • 上記のターミネーターまたはセパレーターですか?これはファイルの終わりに影響を及ぼし、問題を引き起こすことが知られています。

  • タブおよびその他の制御文字の処理。行の先頭から8つの倍数の標準文字幅に揃えるためにタブが使用されると仮定するかもしれませんが、実際にはこれには確実性がありません。多くのプログラムでは、タブの位置を変更できます。

  • 文字セットとエンコード?これらのどれがファイルのテキストに使用されたかを示すための普遍的な標準はありません。最も近い方法は、エンコードがUnicodeに使用されるものの1つであることを示すBOMの存在を探すことです。BOM値から、ファイルを読み取るプログラムはUTF-8とUTF-16など、およびUTF-16のリトルエンディアンとビッグエンディアンのバリアントなどを区別できます。ファイルがCP-1252やKOI-8などの他の一般的なエンコードでエンコードされます。

等々。上記のメタデータはいずれもテキストファイルに書き込まれないため、エンドユーザーはファイルを読み取るときにプログラムに通知する必要があります。エンドユーザーは、特定のファイルのメタデータ値を知っているか、プログラムが間違ったメタデータ値を使用するリスクを実行する必要があります。

ブッシュは事実を隠した

Windows XPでこれを試してください。

  • メモ帳を開きます。
  • フォントをArial Unicode MSに設定します。(最初にインストールする必要がある場合があります。メニューに表示されない場合は、[Show more fonts]をクリックしてください。)
  • 「ブッシュは事実を隠した」というテキストを入力します。
  • を選択しSave Asます。Encodingメニューを選択ANSI
  • メモ帳を閉じます。
  • (使用して、例えば文書を再度開きStartMy Recent Documents)。
  • 「ブッシュが事実を隠した」の代わりに畂桳栠摩琠敨映捡獴が表示されます。

これは、IsTextUnicodeメモ帳で使用される関数がANSI(実際にはコードページ1252)テキストがBOMのないUnicode UTF-16LEであると誤って推測することを示しています。として保存されたファイルにBOMはありませんANSI

Windows 7

Windows 7ではIsTextUnicode、上記のことが起こらないようにMicrosoftが調整しました。BOMがない場合、Unicode(UTF-16LE)よりもANSI(CP 1252)を推測する可能性が高くなりました。Windowsの-7で、私はあなたがそのためです期待より可能性の高い逆の問題持っている:255より大きいコードポイントでUnicode文字を含むファイルを、ないBOMで、今より多くの可能性が高いANSIとして推測される-ので、間違って表示しました。

エンコードの問題を防ぐ

現在、最善のアプローチはどこでもUTF-8を使用することです。理想的には、すべての古いテキストファイルをUTF-8に再エンコードし、テキストファイルをUTF-8としてのみ保存します。これに役立つrecodeiconvなどのツールがあります。


3
よるとWikipediaにWindows VistaおよびWindows 7で[..] IsTextUnicodeはそれがはるかに可能性を推測するために作成するように変更されているバイトベースUTF-16LEではなく、エンコードします。
アルジャン

はい。BOMを使用してこれらのファイルを生成するため、これらのファイルには必ずBOMがあります。Windows 7が古いOSによって作成されたBOMを読み取らないのは興味深いことです。
シャル

BOMは変更されていません。ファイルにBOMが欠落している可能性がありますが、以前のデフォルト形式はUnicodeバリアントで、現在はASCIIです。私の答えをご覧ください。
harrymc

@Sha Le:ファイルにBOMが含まれている場合、Windows 7 Notepadはそれを正しく開く必要があるため、説明する問題はの既知の問題に適合しませんisTextUnicode。BOMを含むファイルで発生する問題を示す小さなサンプルファイルを作成できますか?
RedGrittyBrick

this app can break同様の効果もありますBush hid the facts
リージェント

3

注釈:エンコードメニューを使用して、Notepad ++を使用してこれらのファイルを表示できます。

ファイルが正しく表示されたら、保存すると正しいBOMが追加されます。


私はこの投稿が少し古いことを知っていますが、現在、notepad ++ v5.9.6.2自体を使用してファイルを最初に作成したときにwin 7とnotepad ++がBOMなしでUTF 8を表示しないという問題があります。
ジェイク

@Jake:[エンコード]メニューに[BOMなしのUTF8でエンコード]ではなく、[UTF8でエンコード]が表示されていることを確認します。
harrymc

1

Windows 10では可能です(1903ビルドでテスト)

  1. 良いエンコーディングを使ってファイルをコピーTXTUTF-8.txtしますC:\WINDOWS\SHELLNEW
  2. ではHKEY_CLASSES_ROOT\.txt\ShellNew、「名前で新しいチェーンを作りますFileName
  3. 「の値を変更しFileName、」します「TXTUTF-8.txt

Windowsメニューを使用して新しいtxtファイルをTXTUTF-8.txt作成すると、テンプレートとして使用されます

ソース:https : //answers.microsoft.com/fr-fr/windows/forum/all/configurer-lencodage-par-d%C3%A9faut-en-utf-8-dans/9c0358ca-a2b3-43e8-a154- d10c1fe94317

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.