WindowsコンソールのデフォルトコードページをUTF-8に変更する


123

現在、Windows 7 x64を実行していますが、通常、すべてのコンソールツールがデフォルトのコードページ850ではなくUTF-8で動作するようにしたいと考えています。

chcp 65001ツールを使用する前にコマンドプロンプトで実行すると便利ですが、デフォルトのコードページとして設定する方法はありますか?

更新:

私の場合、システムを起動できないようにHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP値を変更します65001

変更案HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun@chcp 65001>nul私の目的のためだけにも役立ちました。(Ole_Brunに感謝)


(AndroidのSDKのビルドで問題を引き起こすことになる)WindowsのFIND.EXEを壊す可能性が目的とソリューションを注意:superuser.com/questions/176737/...
Jラオ

うーん、chcp 65001を使用すると、dirを実行するとコンソールウィンドウがクラッシュしますが、単に/ uフラグを付けてcmd.exeを起動すると役立ちます(nb:ユニコードを使用するため、chcp.comの出力に反映されません)
eckes

10
エンコードが65001のようなサポートされていないマルチバイトコードページに設定されている場合、Windowsコンソールにはバグが入り込みます。Win32WriteFile / ReadFile APIの出力カウントを使用するソフトウェアは間違った結果を取得し、その結果、MSVCRTのようなものがビルドされますstdlibの実装は、非ASCIIに直面するとマングル/反復出力を生成し、入力でハングします。MSが修正に取り掛かるまで(そして何十年もそのような兆候がなかったまで)、グローバルにコンソールコードページを65001に変更することは非常に悪い考えです。
ボビン

2
AWindows関数のバージョンの使用はすべて壊れています。Wバージョン を使用するには、すべてのコードを移植する必要があります。
デミ

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPは、非ユニコード(非UTF)環境のフォールバックとして使用されます。明らかに、定義上は論争の的となっているように、「ユニコード」に強制しようとします。Windowsがハングするのは、おそらく起動時のシステムの一部が非Unicode文字セットに依存しているためです。
-venimus

回答:


99

コンソールのコードページのみを変更するには、次の手順を実行します。

  1. スタート->実行-> regedit
  2. に行く [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. 値を変更します chcp 65001

1
@Regent質問では@chcp 65001>nul、あなたがあなたのために働いたと述べたレジストリ値はです、この受け入れられた答えでは、ですchcp 65001。2つの違いは何ですか?
銀河

7
@galacticninjaを置くだけでchcp 65001、開いているすべてのコマンドプロンプトで「アクティブなコードページ:65001」が@chcp 65001>nul出力され、出力が妨げられます。
リージェント

7
AutorunWindows 8.1には存在しません。
kleinfreund

2
@kleinfreund @Luke:Autorun存在しない場合、次の内容の新しい 文字列値を追加できます@chcp 65001>nul
-Dacto

1
@ Dr.jacky危険とはどういう意味か正確にはわかりません。私はOPの質問に答えたところです。あなたがそれをすべきかどうかは別の質問です。Pythonには問題があるかもしれないと思うので、少なくともコードページを65001に設定する前に、それを確認することをお勧めします。
ニルスマグネランデ

38

個人的には、レジストリを変更するのは好きではありません。これは多くの問題を引き起こす可能性があります。バッチファイルを作成しました。

@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS

C:\Windows\System32switch.batとして保存しました。

デスクトップにcmd.exeのリンクを作成しました。

cmdショートカットのプロパティで、宛先を次のように変更しました: C:\Windows\System32\cmd.exe /k switch

Voilá、UTF-8で入力する必要があるときは、このリンクを使用します。


7
Active code page: 65001標準出力に出力されることに注意してください。そのCHCP 65001 && mycommand.exeため、そのようなことをしている場合は、最初にコードページが印刷されます。する必要がありますCHCP 65001 >nul && mycommand.exe
フルンバート

32

Regファイル:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. 値は16進数でなければなりません
  2. 一番上の行はそのまま正確に含める必要があります
  3. HKEY_CURRENT_USERは省略できません
  4. dwordは省略できません

コマンド・プロンプト:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. 値は10進数または16進数です
  2. %SystemRoot%はエスケープする必要があります
  3. REG_DWORDは省略できません

パワーシェル:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. 値は10進数または16進数です
  2. -Type DWord PowerShell 3+では想定されています
  3. 使える ni -> New-Item
  4. 使える sp -> Set-ItemProperty
  5. 使える -ea 0 -> -ErrorAction Ignore

Cygwin:

regtool add '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe'
regtool set '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage' 65001
  1. 値は10進数または16進数です
  2. 使える / -> \
  3. 使える HKCU -> HKEY_CURRENT_USER
  4. 使える user -> HKEY_CURRENT_USER

仕事は、CHCP command.Eg経由でコードページを設定し、自動実行作成することであるん何のWindows 10では動作しませんでした
ジョージ

編集が失礼にタイムアウトする前に私が言いたいことは、chcp 65001自動実行コマンドファイルの問題でした。stackoverflow.com/a/17405182/315083
George

問題は、CMDでのみ機能し、コンソール自体では機能しないことです。
9:10のAnrDaemon

5

コードページを変更するコマンドはchcp <codepage>です。例:chcp 1252。Powershellウィンドウに入力する必要があります。毎回入力する手間を省くために(コードページを常に変更する必要がある場合)、プログラムのコマンドラインに追加することができます。これを行うには、次の手順を実行します。

  1. [スタート]メニューの[Powershell]アイコンを右クリックし、[その他]> [ファイルの場所を開く]を選択します。
  2. Powershellショートカットを右クリックして、[プロパティ]を選択します。
  3. 「Target」コマンドラインの最後に次を追加します。 -NoExit -Command "chcp 1252"

幸せになる。他に選択肢がない場合を除き、Windowsレジストリに大騒ぎしないでください。


これは私にとって完璧に機能しました。-NoExit -Command "chcp 1252 > null"また、最初に選択したコードページに関するメッセージを省略します。
CodeMonkey

5

これを行うには、PowerShellプロファイルを作成し、コマンド「chcp 65001> $ null」を追加します。

PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile

これはレジストリの編集を必要とせず、ショートカットの編集とは異なり、Windowsエクスプローラーのコンテキストメニューを使用して特定のフォルダーでPowerShellを起動した場合に機能します。


1
@PimpJuiceIT、いいえ。この答えの最初の行を参照してください。
ダクト

4

Windows 10の1809ビルドでは、システムのに進みLanguage settings、を選択Administrative language settingsしてクリックしChange system locale...、チェックBeta: Use Unicode UTF-8 for worldwide language supportボックスをオンにして、PCを再起動することにより、これを永続的に解決できました。

この方法は、コマンドプロンプトから起動しないものも含め、すべてのアプリケーションに適用されます!
(AtomからAgdaコードを編集しようとしていたので、これは私にとって必要でした。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.