非 Unicode アプリケーションのコード ページを変更してテキスト表示の問題を解決できる AppLocale というアプリケーションがあることはわかっています。
しかし、右表示コードページUTF-8なのでテキストはUTF-8で表示される必要があります、代わりにWindowsネイティブコードページとして表示するテキストが読めなくなります。ほとんどすべての国と地域がUTF-8ではないので、おかしいですね。プログラマーが英語を使用し、英語以外のテキスト表示の問題のテストを無視している可能性があるため、これはバグだと思います。プロデューサーが修正するとは思えないので、自分で修正したいと思っています。
AppLocale のようなソフトウェアを使用して、非 Unicode 出力を UTF-8 として設定することは可能ですか? デフォルトの非 Unicode 出力はネイティブ コード ページですか? ネイティブ コード ページを UTF-8 に設定するにはどうすればよいですか?
答え1
以前は不可能だった。
Microsoft は、UTF-8 ロケールでは一部の関数 ( など
_mbsrev
) が機能しなくなる可能性があると主張しました。これは、これらの関数がマルチバイト エンコーディングで 1 文字あたり 2 バイト以下が使用されることを前提として記述されているためであり、そのためこれまでは GB 18030 (cp54936) や UTF-8 などのバイト数が多いコード ページはロケールとして設定できませんでした。https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8
しかし、「ベータ版: 世界中の言語をサポートするために Unicode UTF-8 を使用する」Windows 10 インサイダー ビルド 17035 以降、ロケール コード ページを UTF-8 に設定するためのチェックボックス
参照
- Windows で ANSI および OEM コード ページを変更する
- Windows 10 Insider Preview Build 17035 は UTF-8 を ANSI としてサポートします
とはいえ、現時点ではサポートにはまだバグがある。
- UTF-8 をデフォルトのコード ページとして使用すると、Windows 10 1803 でフリーズの問題が発生する
- Windows 10 の Unicode ベータ サポートを有効にすると、アドオンのインストールに失敗する
- シングルバイト文字セットのUTF-8サポートはWindowsではベータ版であり、これを想定していない多くのアプリケーションで動作しなくなる可能性があります。
- MSVC で内部エラーが発生してビルドが失敗する
アップデート:
マイクロソフトは、上記のUTF-8ベータフラグを設定しなくても、プログラムがUTF-8ロケールを使用できる機能も追加しました。/execution-charset:utf-8
または/utf-8
MSVCでコンパイルするときのオプション、またはappxmanifestのActiveCodePageプロパティを設定する
適切なCランタイムとリンクすることで、古いWindowsバージョンでもUTF-8ロケールを使用できます。
Windows 10 ビルド 17134 (2018 年 4 月更新) 以降、Universal C Runtime は UTF-8 コード ページの使用をサポートします。つまり、
char
C ランタイム関数に渡される文字列は、UTF-8 エンコードの文字列を期待します。UTF-8 モードを有効にするには、 を使用するときにコード ページとして「UTF-8」を使用しますsetlocale
。たとえば、 は、setlocale(LC_ALL, ".utf8")
ロケールに現在の既定の Windows ANSI コード ページ (ACP) を使用し、コード ページには UTF-8 を使用します。...
Windows 7などのWindows 10より前のOSでこの機能を使用するには、アプリローカル展開または、Windows SDK バージョン 17134 以降を使用して静的にリンクします。17134 より前の Windows 10 オペレーティング システムでは、静的リンクのみがサポートされます。
答え2
マイクロソフトについて読んだものからWikipedia の AppLocale ツールただし、ツールではコード ページを UTF-8 に変更することはできません。非Unicodeアプリケーションでのみ動作しますただし、UTF-8 は Unicode 標準の一部です。
内部的には、非 ASCII 文字の Unicode 処理は非 Unicode 処理とは大きく異なるため、非 Unicode コード ページ間での変更は可能ですが (これは AppLocale が行うことです)、その作成者が作成したアプリケーションを変更せずに Unicode と非 Unicode 間で変更することはできません。
答え3
ここで言及しておきますが、Windows 10 17133 では、世界中でサポートするために UTF-8 を使用するベータ オプションが提供されています。ただし、現時点では非 Unicode プログラムには役立ちませんが、非 Unicode プログラムのロケールを変更できるポップアップに配置されています。
したがって、非 Unicode プログラムのロケールを変更する必要性をなくすために、何かに取り組んでいるのかもしれません。