web-dev-qa-db-ja.com

「Unicode以外のプログラムの言語を選択してください...」ダイアログの本当の意味は何ですか?

"使用する非Unicodeプログラムの言語バージョンに一致する言語を選択してください"ダイアログの[コントロールパネル]-> [地域の設定]-> [WinXPおよびWin2003の詳細]の本当の意味は何ですか?

ダイアログテキストによると、Windowsはこれを使用してメニューなどのリソース文字列を表示します。テキストファイルの処理はアプリケーション固有であるため、この設定はそれに影響しません。

しかし、この設定から他の動作の変化を期待できますか?この設定が変更されたときに実際に何が起こっているかについての洞察はありますか?

編集:値にアクセスするための内部(Windows APIなど)の方法は何ですか?

7
Joshua Fox

クイックアンサー:Windowsは、この設定を古い8ビットASCII文字と最新の16-ビットUnicode文字。一部のアプリケーションは、この設定を悪用して、表示する言語のユーザーインターフェイスを決定します。

テキストファイルの処理はアプリケーション固有であるため、この設定はそれに影響しません。

完全に真実ではありません。次にいくつかの例を示します:(非Unicodeプログラムで韓国語に設定されている場合 '\'(円記号)は '₩'(韓国の通貨記号)に置き換えられます)

  • 多くのアプリケーションでは、すべての「\」は「₩」として表示されます。gVim(テキストエディタ)を見てください。注:基になるデータは、「\」が表示されたときと同じです。このファイルを別のコンピューターで開くと、再び「\」のようになります。
  • すべてのファイルパスは「₩」で区切られます。
  • Intelのビデオドライバーなどの一部のアプリケーションは、この設定を取得して、表示する言語UIを決定します。

alt text

背景情報:

8ビットの文字列を格納するために使用されるウィンドウASCII文字。つまり、各文字は8桁の2進数を使用しました。これ256の異なる文字のみが許可され、世界のすべての記述言語を表すには不十分でした。そのため、異なる言語地域では、8ビット文字をそれぞれの言語に合わせて異なる方法で解釈することにしました( '$に加えてアクセント付き母音、独自の通貨記号を追加'など)これらはエンコーディングと呼ばれます。アプリケーションは、使用するエンコーディングをWindowsに明確に指示する必要があります。多くのプログラムはそうではないため、WindowsはそのバージョンのWindowsのローカルエンコーディングを想定しています。

Windowsは16ビットのUnicode文字を含む文字列を格納するようになりました。各文字は2倍のビットを使用します。これにより、最大(ほぼ)65,536の異なる文字が可能になります。世界のすべての書かれた言語を表すにはまだ十分ではありませんが、Unicodeは、はるかに幅広い文字プールから特定の文字セットを選択する方法も指定しています。

Unicodeを知らない古いプログラムを実行するとWindowsは何をしますか?Windowsは8ビット間で変換する必要がありますASCII文字と16ビットUnicode文字。古いアプリケーションが明示的にエンコーディングを指定している場合、Windowsはこれをかなりうまく行うことができますが、多くのアプリケーションは指定していません。そのため、Windowsはデフォルトで問題の設定になります:非Unicodeプログラムの言語。


編集:ジョシュアのコメントに対処する

したがって、GUI文字列のエンコーディングを選択することに加えて、この設定はフォントの選択に影響を与える可能性があります(₩は、ヨーロッパのフォントでバックスラッシュとして表示されるものの単なるフォント表現だと思いますよね?)

はいといいえ。 TrueTypeフォントにこの文字が含まれていない場合、「₩」を表示するために「 fontlinking "」と呼ばれるものが発生しています。 「₩」のみが別のフォントで表示されます。ただし、TrueType以外のフォントの場合は、まったく異なるフォントが使用されます(たとえば、cmdコンソールで)。また、通貨記号は非常に特殊なケースです。 Windowsは、以前のバージョンのWindowsの動作を維持するために、「\」を現地通貨の記号に置き換えるための追加の作業を行います。

Windowsシステムのフォントも、「 フォント置換 」と呼ばれるものを介して変更されます。この場合、システムフォントは完全に新しいフォントに置き換えられます(ただし、フォントの名前は同じままです)。韓国語ロケールでの私の経験から、置き換えられる新しいフォントは、元のフォントほど見栄えがよくありません。

この設定は他に影響しますか?

韓国語ロケールを使用すると、アプリケーションが正しく機能しなくなるというまれな経験があります。私が覚えているアプリケーションの1つは、正規表現プレビューツールでした。韓国語のロケールでは正しい結果が得られなかっただけです(または、開始されない可能性がありますか?)このプログラムを使用したいときはいつでも米国のロケールに切り替える必要がありました。

7
Leftium

Windows XPやServer2003などのUnicodeベースのプラットフォームは、一般に呼ばれるシステム全体の変数を使用して、アプリケーションの非Unicodeテキストデータを内部でUnicodeに変換することにより、非Unicodeアプリケーションの実行に必要な言語環境をエミュレートします。 「システムロケール」(または「非Unicodeアプリケーションの言語」)。非Unicodeアプリケーションの言語は、「システムロケール」で定義されたものと同じスクリプトまたはファミリである必要があります。この条件を満たさない場合、次のようになります。アプリケーションのUIでのゴミ文字の表示。

ソース

または:

この設定により、Unicodeをサポートしていないプログラムは、必要なコードページとフォントをインストールすることにより、メニューとダイアログボックスを母国語で表示できます。ただし、他の言語用に設計されたプログラムでは、テキストが正しく表示されない場合があります。

この設定の影響を受けるのは、Unicode以外のプログラムのみです。このオプションで選択した言語は、Windowsまたはその他のUnicodeプログラムのメニューとダイアログボックスを変更しません。

from 非Unicodeプログラムを母国語で表示するには

詳細については、 非Unicodeプログラムの言語 を参照してください。

1
Hugh Allen