Windows 7(Pro 64ビット)の変更点を誰かが説明してもらえますか?
詳細:以前はWindows XPで、CSV形式のいくつかの翻訳ファイル(UTF-8エンコード)がありました。フォントをメモ帳とExcelの両方で表示できました。Windows7にアップグレードした後これらのファイルを開くと、四角いボックスだけが表示されます(ブラウザーで開くとわかりますが、すべての翻訳を見ることができました)。これらのファイルをUnicodeで保存すると、すべて問題ないようです。
それで、正確には何が起こっているのですか? Windows 7がUTF-8ではなくUnicodeで動作するのはなぜですか?
Windows 7がUTF-8ではなくUnicodeで動作するのはなぜですか?
nicode と TF-8 は同じ種類ではありません。Unicodeは文字セット文字のセット(レパートリー)を定義し、それらの各文字に番号(コードポイント)を割り当てます。 UTF‑8は、representに使用できるいくつかのエンコーディングの1つですディスク上または転送中のUnicode文字のストリーム。同じUnicode文字のストリームを、たとえばUTF-16、UTF32、またはUTF-7としてエンコードすることもできます。
ただし、メモ帳には、ANSI
、Unicode
、Unicode big-endian
、UTF-8
などの「エンコード」オプションが用意されています。これを書いたマイクロソフトの開発者は間違った用語を使用しています。彼らが「Unicode」と言うとき、彼らはおそらく「 TF-16little-endian "を意味します。彼らが「ANSI」と言うとき、それらは コードページ1252 (CP-1252)を意味します。
Microsoftのメモ帳はバイトオーダーマーク( [〜#〜] bom [〜#〜] )でUTF-16を書き込み、メモ帳はテキストファイルを読み取るときにBOMを探すと思います。 BOMは、ファイルがUTF-16であることをアプリに通知し、ファイルがビッグエンディアンかリトルエンディアンかを示します。
BOMが見つからない場合、メモ帳はライブラリ関数 IsTextUnicode
を呼び出します。これは、データを調べて、使用されたエンコーディングを推測しようとします。時々(必然的に)間違って推測する。 「ANSI」ファイルが「Unicode」であると推測する場合があります。 UTF-16またはUTF-8ファイルをコードページ1252として解釈しようとすると、誤ったグリフが表示され、一部の8ビット値をレンダリングするためのグリフを見つけることができなくなります。これらは正方形として表示されます。
彼の答え でハリーマックが言うように、メモ帳に代わるより良い選択肢があります。ただし、メモ帳では、ファイルを開くときにエンコードを明示的に選択できます(メモ帳を離れて推測するのではなく)。
Unicodeコンソーシアムによれば、バイトオーダーマーク(BOM)はオプションです。ただし、Windowsは一部のエンコーディングを区別するためにBOMに依存しています。
つまり、何らかの理由でファイルにBOMが不足しているのではないでしょうか。アップグレードプロセス中にBOMが失われた可能性がありますか?
正方形として表示される元のファイルがまだある場合は、それらの16進ダンプを作成して、BOMが含まれているかどうかを確認できます。
問題は、実質的にnoneが存在することです。プレーンテキストファイルの一般的な標準はありません。代わりに、多くの非互換性と未知のものがあります。
行末はどのようにマークされていますか?一部のプラットフォームでは、制御文字のキャリッジリターン(CR)に続いてラインフィード(LF)を使用し、CRのみを使用するプラットフォームと、LF=のみを使用するプラットフォームがあります。
上記のターミネーターまたはセパレーターですか?これはファイルの最後に影響し、問題を引き起こすことがわかっています。
タブおよびその他の制御文字の扱い。行の先頭から8の倍数の標準文字幅に揃えるためにタブが使用されていると想定するかもしれませんが、実際にはこれに確実性はありません。多くのプログラムでは、タブの位置を変更できます。
文字セットとエンコーディング?これらのどれがファイル内のテキストに使用されているかを示すための普遍的な標準はありません。最も近いのは、エンコーディングがUnicodeで使用されているものの1つであることを示すBOMの存在を探すことです。 BOM値から、ファイルを読み取るプログラムは、UTF-8とUTF-16など、およびUTF-16のリトルエンディアンとビッグエンディアンのバリアントなどを区別できます。ファイルであることを示すための普遍的な標準はありません。 CP-1252やKOI-8などの他の一般的なエンコーディングでエンコードされます。
等々。上記のメタデータはいずれもテキストファイルに書き込まれないため、エンドユーザーはファイルを読み取るときにプログラムに通知する必要があります。エンドユーザーは、特定のファイルのメタデータ値を知っているか、プログラムが誤ったメタデータ値を使用するリスクを負わなければなりません。
Windows XPでこれを試してください。
Save As
を選択します。 Encoding
メニューからANSI
を選択します。Start
、My Recent Documents
を使用)。これは、メモ帳で使用されるIsTextUnicode
関数が、ANSI(実際にはコードページ1252)テキストがBOMのないUnicode UTF-16LEであると誤って推測していることを示しています。 ANSI
として保存されたファイルにはBOMがありません。
Windows 7では、上記が発生しないようにIsTextUnicode
を調整しました。 BOMがないと、Unicode(UTF-16LE)よりもANSI(CP 1252)を推測する可能性が高くなります。したがって、Windows 7では、more逆の問題が発生する可能性が高いと考えています。255を超えるコードポイントを持つUnicode文字を含むが、 BOMはANSIであると推測される可能性が高くなり、そのため正しく表示されません。
現在、最善の方法は、どこでもUTF-8を使用することです。理想的には、すべての古いテキストファイルをUTF-8に再エンコードし、テキストファイルをUTF-8として保存するだけです。これに役立つ recode や iconv などのツールがあります。
備考: Notepad ++ を使用して、Encodingメニューからこれらのファイルを表示できます。
ファイルが正しく表示されたら、ファイルを保存すると正しいBOMが追加されます。
Windows 10では可能です(1903ビルドでテスト)
TXTUTF-8.txt
からC:\WINDOWS\SHELLNEW
。HKEY_CLASSES_ROOT\.txt\ShellNew
"FileName
"という名前の新しいチェーンを作成しますFileName
」の値を「TXTUTF-8.txt
"これで、Windowsメニューを使用して新しいtxtファイルを作成すると、TXTUTF-8.txt
テンプレートとして