Questão Alterar a página de códigos padrão do console do Windows para UTF-8


Atualmente eu estou executando o Windows 7 x64 e geralmente eu quero todas as ferramentas de console para trabalhar com UTF-8, em vez de com a página de código padrão 850.

Corrida chcp 65001 no prompt de comando antes de usar qualquer ferramenta ajuda, mas existe alguma maneira de definir como página de código padrão?

Atualizar:

Mudando HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP valor para 65001 parecem fazer o sistema incapaz de inicializar no meu caso.

Proposta de mudança de HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun para @chcp 65001>nul serviu muito bem para o meu propósito. (graças a Ole_Brun)


98


origem


Observe que a solução proposta poderia quebrar o find.exe do Windows (o que causaria problemas com a compilação do Android SDK): superuser.com/questions/176737/… - J Rao
Hm, quando eu uso o chcp 65001, meu console trava quando eu faço o dir, mas ajuda simplesmente iniciar o cmd.exe com o sinalizador / u (nb: ele usa unicode por ele não é refletido na saída do chcp.com) - eckes
Usando a página de código UTF-8 também quebra o more comando (dá a mensagem de erro enganosa Not enough memory.) Abrindo o prompt de comando com o /U interruptor não ajuda. - Synetech
O console do Windows está repleto de bugs quando a codificação é definida como uma página de código de múltiplos bytes sem suporte como 65001. Qualquer software que use as contagens de saída das APIs WriteFile / ReadFile do Win32 obterá os resultados errados e, consequentemente, recursos semelhantes aos do MSVCRT a implementação do stdlib produzirá uma saída repetida e desconfigurada e ficará ativa quando confrontada com não-ASCII. Até que a MS consiga resolvê-lo - e já faz décadas sem nenhum sinal disso -, a mudança global da página de código do console para 65001 é extraordinariamente má ideia. - bobince
Qualquer uso do A versões de funções do Windows estão quebradas.  Todo o código precisa ser portado para usar o W versões. - Demi


Respostas:


Para alterar a página de códigos apenas para o console, faça o seguinte:

  1. Iniciar -> Executar -> regedit
  2. Vamos para [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Altere o valor para chcp 65001

78



Esteja ciente de que alterar a página de códigos não afetará apenas o console. Para fazer isso só se aplica ao console, você poderia colocar chcp 65001 no HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun. - Nils Magne Lunde
Surpreendentemente, mudar o OEMCP configuração do registro fez meu sistema incapaz de arrancar, então eu tive que usar a recuperação do sistema para restaurar ao estado de trabalho. Autorun fez o truque, no entanto. - Regent
@Regent: Se esta solução tornar seu sistema não inicializável, por que você o marcou como aceito? - Tim Pietzcker
@ galacticninja simplesmente colocando chcp 65001 fará com que cada prompt de comando aberto imprima 'Active code page: 65001' enquanto @chcp 65001>nul irá impedir qualquer saída. - Regent
Autorun não está presente para mim no Windows 8.1. - kleinfreund


Eu não gosto de mudar o sistema. Isso cria muitos problemas para mim. Eu criei um arquivo em lotes:

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

Salvei em C: \ Windows \ System32 como switch.bat.

Eu criei um link para cmd.exe na área de trabalho.

Nas propriedades do cmd, alterou o destino para: C:\Windows\System32\cmd.exe /k switch

Voilá, quando eu preciso digitar UTF-8, eu uso esse link.


31



Note que vai imprimir Active code page: 65001 para stdout. Então, se você está fazendo algo como CHCP 65001 && mycommand.exe então você terá a página de códigos impressa no início. Você precisa CHCP 65001 >nul && mycommand.exe - frumbert


Arquivo Reg:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. O valor deve estar em hexadecimal
  2. A linha superior deve ser incluída exatamente como é
  3. HKEY_CURRENT_USER não pode ser abreviado
  4. dword não pode ser omitido

Prompt de comando:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. O valor pode estar em dec ou hex
  2. % SystemRoot% deve ter escapado
  3. REG_DWORD não pode ser omitido

PowerShell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. O valor pode estar em dec ou hex
  2. -Type DWord é assumido com o PowerShell 3+
  3. Pode usar ni -> New-Item
  4. Pode usar sp -> Set-ItemProperty
  5. Pode usar -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. O valor pode estar em dec ou hex
  2. Pode usar / -> \
  3. Pode usar HKCU -> HKEY_CURRENT_USER
  4. Pode usar user -> HKEY_CURRENT_USER

25





O comando para alterar a página de códigos é chcp <codepage>. Exemplo: chcp 1252. Você deve digitá-lo em uma janela do Powershell. Para evitar o incômodo de digitá-lo toda vez (se você sempre tiver que alterar a página de códigos), você pode anexá-lo à linha de comando do programa. Para fazer isso, siga estas etapas:

  1. Clique com o botão direito do mouse no ícone do Powershell no menu Iniciar e escolha "Mais"> "Abrir local do arquivo".
  2. Clique com o botão direito do mouse no atalho do Powershell e selecione "Propriedades".
  3. Adicione o seguinte ao final da linha de comando "Target": -NoExit -Command "chcp 1252"

Seja feliz. Não se preocupe com o Windows Registry, a menos que você não tenha outra opção.


3



Este funcionou perfeitamente para mim. -NoExit -Command "chcp 1252 > null" também omite a mensagem sobre a página de código selecionada no início. - CodeMonkey


Isso pode ser feito criando um perfil do PowerShell e adicionando o comando "chcp 65001> $ null" a ele:

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

Isso não requer a edição do registro e, ao contrário da edição de um atalho, funcionará se o PowerShell for iniciado em uma pasta específica usando o menu de contexto do Windows Explorer.


1



Então, isso é totalmente diferente do que a outra resposta que sugere usar chcp 65001? - Pimp Juice IT