回答:
chcpはアクティブなコードページを取得します。
systeminfoは、特にシステムロケールと入力ロケールを表示します。
" 注:このコマンドは(システム情報)は、Windows 2000で使用できませんが、することができますまだ2003コンピュータとセットリモートコンピュータのWindows 2000コンピュータにWindows XPまたはWindows上でこのコマンドを実行することにより、クエリのWindows 2000コンピュータの場合、これを実行し、現在のユーザーのログオン。コマンドはリモートマシン(ドメイン管理者など)で既に特権を持っているため、/ uおよび/ pを使用する必要はありません。」ここ
から。
特定のシステムには、以前はシステムロケールと呼ばれていた、非Unicodeプログラムのlanguageという名前のレガシ設定によって決定される、関心のある2つのアクティブなコードページがあることに注意してください(背景情報については下のセクションを参照してください):
注:コードページはさらに2つありますが、使用されることはほとんどないため、ここでは説明しません:EBCDICコードと(OS X以前の)Macコードページ-WinAPIのドキュメントを参照してください。
アクティブOEMコードページは、最も簡単に介して取得されるchcp
に示すように、忘れられたセミコロンの役に立つ答え -それは明示的にセッションで変更されていなかったと仮定しますchcp <codePageNum>
。
アクティブなANSIコードページの決定はそれほど簡単ではありませんが、PowerShellはシステムロケールの名前と言語の決定にも役立ちます。
Windows 8+ / Windows Serverの2012+使用:Get-WinSystemLocale
コマンドレット:
Get-WinSystemLocale | Select-Object Name, DisplayName,
@{ n='OEMCP'; e={ $_.TextInfo.OemCodePage } },
@{ n='ACP'; e={ $_.TextInfo.AnsiCodePage } }
注:[cultureinfo]::CurrentCulture.TextInfo.ANSICodePage
たとえばを使用したくなるかもしれませんが、これは必ずしもシステム全体のアクティブなANSIコードページを反映しているわけではありません。代わりに、現在のユーザーのロケール(カルチャ)に関連付けられたANSIコードページであり、異なる場合があります。
米国英語システムでは、上記の結果は次のようになります。
Name DisplayName OEMCP ACP
---- ----------- ----- ---
en-US English (United States) 437 1252
OEMCP
OEMコードページ、ACP
ANSIコードページです。
Windows XPまでの古いシステムでも機能するレジストリベースの方法:
# Get the code pages:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage |
Select-Object OEMCP, ACP
米国英語システムでは、上記の結果は次のようになります。
OEMCP ACP
----- ---
437 1252
システムロケールの[フレンドリ] 名とLCID も取得する場合(LCIDは非推奨であることに注意してください):
[Globalization.CultureInfo]::GetCultureInfo([int] ('0x' + (
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Language' Default
).Default)
)
米国英語システムでは、上記の結果は次のようになります。
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
背景情報:
システムロケールは、非Unicodeプログラムの言語と呼ばれるようになったもの( NLSの用語を参照)のレガシー名であり、名前が示すとおり:
この設定は、レガシープログラム(Unicodeをサポートしないプログラム)にのみ適用されます。
特定のユーザーのロケール設定に関係なく、システム全体に適用され、それを変更するには管理者権限が必要です。
これはレガシー設定であることに注意することが重要です。コードページは、内部的にUnicodeを使用し、Windows APIのUnicodeバージョンを呼び出すプログラムには適用されなくなるためです。
特に、アクティブなコードページ、つまりデフォルトで使用される文字エンコーディングを決定します。
ANSIコードページを使用するUnicode対応でないプログラムは、Windows APIの非Unicode(ANSI)バージョン、の特にANSIバージョンを呼び出すときTextOut
、特にUnicodeにしてから、文字列を変換するための機能、プログラムの文字列がでレンダリング方法を決定しますGUI。
に反映されるように、コンソールウィンドウでデフォルトでアクティブにするOEMコードページ。chcp
65001
UnicodeのUTF-8エンコーディングを表す擬似コードページの使用は解決策ですが、レガシーコマンドラインプログラムがデータを誤って解釈し、失敗することさえあります-詳細については、このStackOverflowの回答を参照してください。850
、で実行chcp 850
しcmd.exe
、$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)
PowerShell で実行します。レガシー用語で使用される単語ロケールと現在の用語での単語言語にもかかわらず:
のみ設定によって制御態様は、アクティブなコードページのセットとデフォルトのビットマップフォントも、(ユーザーレベルのロケール設定によって制御される)ロケールの他の要素ではありません。
通常、特定のコードページは多くのロケールで共有され、複数の言語をカバーしています。たとえば、広く使用されている1252
コードページは、英語を含む多くの西ヨーロッパ言語で使用されています。
あなたがコントロールパネルから設定を変更してくださいしかし、あなたは設定を選んでやるの方法により、特定のロケール。
すべてのWindowsコードページのリストについては、https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiersを参照してください
GetACP()
関数-technet.microsoft.com/en-us/dd318070-これは興味深いリンクです。注釈セクションは、この関数の戻り値はユーザーが選択したデフォルトの入力言語とGUI言語ではなく、まったく異なるものであることを示しています...
アクティブなコードページを返すWindows APIはGetConsoleOutputCP()です。
chcp
コマンド)
chcp
アクティブなOEMコードページが表示されることに注意してください。mklementが彼の答えで述べているように、Windowsで使用されている別のアクティブなコードページ、ANSIコードページが常にあります。詳細については、mklementの回答を参照してください。