ANSIで保存したファイルがUTF-8になる

ANSI(≒Shift_JIS)で保存したファイルが、

もう一度開くと、UTF8になる。

何故こんなことが起こるのか、ということについて解説します。

端的な原因解説

上記メモ帳で開いているテキストには、ASCIIと互換性のある1バイト文字のみを使用しています。
その為、WindowsからはASCIIもUTF-8もShift_JISも同じに見え、閲覧するアプリケーションのデフォルトエンコーディング設定によってはUTF-8と表示されたり、Shift_JISと表示されたりします

上記は、Azure上の日本語化したWindows Server 2022での事象ですが、すべてのWindowsで共通のことだと思います。

少し詳細な解説

まず、UTF-8 のうち ASCII 文字の部分 (半角アルファベットや、基本的な記号類) につ
いては、ASCII コードと完全に同一のバイナリ列となっています。
UTF-8 は ASCII コードとの互換性があり、ASCII 文字の部分は ASCII 同様に 1 文字 1 バイト、その他 ASCII 範囲外の文字は 1 文字 2 ~ 6 バイトで符号化する符号化方式となっています。(日本語の文字は大半が 1 文字 3 ~ 4 バイト。)

また、Shift_JIS (厳密には、Windows 上では Shift_JIS の Microsoft 実装である”Microsoft コードページ 932″ ですが、ココでは便宜的に “Shift_JIS” と呼びます) も ASCII コードとの互換性を維持した符号化方式です。ASCII 文字の部分は、オリジナルの ASCII コードと同一のバイナリ列に符号化されています。

上記より、ASCII 文字のみで構成されたテキスト ファイルは、作成者が保存処理を行う際に ASCII / UTF-8 / Shift_JIS のいずれを選択しても結果のバイナリ列は完全に同一となります。純粋な ASCII コードのテキスト ファイルであるため、保存時にどの符号化方式を選択したかといった情報は含まれておらず、次回ファイルを開く際に判別を行うことが不可能な状態だからです。

このような場合、[メモ帳] アプリケーションはデフォルトの符号化方式である UTF-8 (※)としてファイルを開きます。(※Windows 10 version 1903 より、メモ帳 (notepad.exe) での既定の保存
形式が UTF-8 (BOM なし) へ変更されています)編集が行われ、日本語の文字等 ASCII 範囲外の文字を含んだ状態で再度保存された場合は、UTF-8 または Shift_JIS それぞれに固有の符号化方式でバイナリ化された文字を含むため、次回オープン時に文字コード / 符号化方式の判定が行われ、保存時に指定したフォーマットがアプリケーション上に表示される動作となります。

いいね (←参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください