Altere a página de código padrão do console do Windows para UTF-8

123

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

A execução chcp 65001no prompt de comando antes do uso de qualquer ferramenta ajuda, mas existe alguma maneira de definir a página de código padrão?

Atualizar:

Alterar o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPvalor para 65001aparecer para tornar o sistema incapaz de inicializar no meu caso.

Proposta de mudança do HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorunque @chcp 65001>nulserviu apenas bem para o meu propósito. (graças a Ole_Brun )

Regente
fonte
Observe que a solução proposta pode interromper o find.exe do Windows (o que causaria problemas com a compilação do SDK do Android): superuser.com/questions/176737/…
J Rao
Hm, quando eu uso o chcp 65001, as janelas do console falham quando faço o dir, mas ajuda simplesmente iniciar o cmd.exe com o sinalizador / u (nb: ele usa unicode por não ser refletido na saída do chcp.com)
eckes
10
O console do Windows está cheio de bugs quando a codificação é definida como uma página de código de vários bytes não suportada, como 65001. Qualquer software que utilize as contagens de saída das APIs Win32 WriteFile / ReadFile obterá resultados incorretos e, consequentemente, criará coisas como as do MSVCRT A implementação do stdlib produzirá saída mutilada / repetida e ficará suspensa quando for confrontada com não ASCII. Até a MS resolver o problema - e já se passaram décadas sem que isso aconteça - alterar globalmente a página de código do console para 65001 é uma ideia extremamente ruim .
quer
2
Qualquer uso das Aversões das funções do Windows está quebrado. Todo o código precisa ser portado para usar as Wversões.
Demi #
1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPé usado como fallback para ambientes não unicode (não utf), obviamente você tenta forçá-lo a um 'unicode', pois vê que é controverso por definição. O Windows trava provavelmente porque algumas coisas do sistema na inicialização dependem do conjunto de caracteres não unicode para funcionar.
venimus 23/08

Respostas:

99

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

  1. Iniciar -> Executar -> regedit
  2. Vamos para [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Mude o valor para chcp 65001
Nils Magne Lunde
fonte
1
@Regent Na pergunta, o valor do registro que você mencionou que funcionou para você é @chcp 65001>nul, enquanto nesta resposta aceita, é chcp 65001. Quais sao as diferenças entre os dois?
galacticninja
7
A simples colocação de @galacticninja chcp 65001fará com que cada prompt de comando aberto imprima 'Página de código ativa: 65001' e @chcp 65001>nulevite qualquer saída.
Regent
7
Autorunnão está presente para mim no Windows 8.1.
Kleinfreund #
2
@kleinfreund @Luke: se Autorunnão estiver presente, você pode adicionar um Novo Valor de Cadeia de caracteres com o conteúdo de@chcp 65001>nul
Dacto
1
@ Dr.jacky Não tenho certeza exatamente o que eles significam com perigoso. Acabei de responder à pergunta do OP. Se você deve fazer isso ou não, é uma questão diferente. Acredito que possa haver alguns problemas com o Python, então você pode querer verificar isso antes de definir a página de códigos para pelo menos 65001.
Nils Magne Lunde
38

Pessoalmente, não gosto de alterar o registro. Isso pode causar muitos problemas. Eu criei um arquivo em lote:

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

Salvei em C:\Windows\System32como switch.bat.

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

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

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

juca
fonte
7
Observe que ele será impresso Active code page: 65001em stdout. Então, se você estiver fazendo algo assim CHCP 65001 && mycommand.exe, terá a página de código impressa no início. Você precisaCHCP 65001 >nul && mycommand.exe
frumbert 12/06
32

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 está
  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 ser 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
Steven Penny
fonte
Não funcionou no Windows 10. O que funciona é criar uma execução automática que define a página de código através do comando chcp.
George
O que eu quis dizer antes da edição rudemente expirar foi o problema chcp 65001em um arquivo de comando de execução automática. Veja stackoverflow.com/a/17405182/315083
George
O problema é que ele só funciona para o CMD, mas não para o console por si só.
AnrDaemon
5

O comando para alterar a página de código é chcp <codepage>. Exemplo: chcp 1252. Você deve digitá-lo em uma janela do PowerShell. Para evitar o incômodo de digitá-lo sempre (se você sempre precisar alterar a página de código), você pode anexá-lo à linha de comando do programa. Para fazer isso, execute as seguintes 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 "Destino": -NoExit -Command "chcp 1252"

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

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

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 edição do registro e, diferentemente 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.

Freon Sandoz
fonte
1
@PimpJuiceIT, não. Veja a primeira linha desta resposta.
Dacto
4

Na versão 1809 do Windows 10, eu consegui resolver isso permanentemente, acessando o sistema Language settings, selecionando Administrative language settings, clicando Change system locale...e marcando a Beta: Use Unicode UTF-8 for worldwide language supportcaixa e reiniciando o meu PC.

Dessa forma, aplica-se a todos os aplicativos, mesmo aqueles que não inicio em um prompt de comando!
(O que foi necessário para mim, pois estava tentando editar o código Agda a partir do Atom.)

Isti115
fonte