Temos um projeto no Team Foundation Server (TFS) que possui um caractere não inglês (š). Ao tentar criar scripts para algumas coisas relacionadas à construção, encontramos um problema - não podemos passar a letra š para as ferramentas de linha de comando. O prompt de comando ou o que não está errado , e o utilitário tf.exe não consegue encontrar o projeto especificado.
Eu tentei diferentes formatos para o arquivo .bat (ANSI, UTF-8 com e sem BOM ) e também o script em JavaScript (que é inerentemente Unicode) - mas sem sorte. Como executo um programa e transmito a ele uma linha de comando Unicode ?
Respostas:
Meu histórico: uso anos de entrada / saída Unicode em um console por anos (e faço isso diariamente. Além disso, desenvolvo ferramentas de suporte para exatamente essa tarefa). Existem muito poucos problemas, na medida em que você entende os seguintes fatos / limitações:
CMD
e "console" são fatores não relacionados.CMD.exe
é apenas um dos programas prontos para "trabalhar dentro" de um console ("aplicativos de console").CMD
possui suporte perfeito para Unicode; você pode inserir / produzir todos os caracteres Unicode quando qualquer página de código estiver ativa.chcp 65001
é muito perigoso A menos que um programa tenha sido especialmente projetado para solucionar defeitos na API do Windows (ou use uma biblioteca de tempo de execução C com essas soluções alternativas), ele não funcionaria de maneira confiável. O Win8 corrige ½ desses problemascp65001
, mas o restante ainda é aplicável ao Win10 .cp1252
. Como eu já disse: Para inserir / enviar Unicode em um console, não é necessário definir a página de código .Os detalhes
File-I/O
API, mas aConsole-I/O
API. (Por exemplo, veja como o Python faz isso .)U+10000
). Somente a renderização de texto simples é suportada (portanto, os idiomas europeu - e alguns do leste asiático - devem funcionar bem - desde que se use formulários pré-compostos). [Há uma pequena impressão fina aqui para o leste asiático e para os caracteres U + 0000, U + 0001, U + 30FB.]Considerações práticas
Os padrões no Windows não são muito úteis. Para uma melhor experiência, é necessário ajustar três partes da configuração:
Mais uma dica com "Colar" em um aplicativo de console (muito técnico):
KeyUp
deAlt
; todas as outras maneiras de entregar um personagem acontecemKeyDown
; tantas aplicações não estão prontas para ver um personagemKeyUp
. (Aplicável apenas a aplicativos que usamConsole-I/O
API.)Ctrl-Alt-AltGr-Kana-Shift-Gray*
), ele será entregue com um pressionamento de tecla emulado. Isso é o que qualquer aplicativo espera - então colar qualquer coisa que contenha apenas esses caracteres é bom.Conclusão : a menos que seu layout de teclado suporta entrada de um lote de caracteres sem chaves prefixo, algumas aplicações de buggy pode pular caracteres quando você
Paste
via UI do Console:Alt-Space E P
. ( Este é por isso que eu recomendo usar meus layouts de teclado!)Também devemos ter em mente que os “consoles alternativos e 'mais capazes'” para Windows não são consoles . Eles não suportam
Console-I/O
APIs, portanto, os programas que dependem dessas APIs para funcionar não funcionariam. (Os programas que usam apenas "APIs de E / S de arquivo para os identificadores de arquivo do console" funcionariam bem, no entanto).Um exemplo desse não console é parte da MicroSoft
Powershell
. Eu não uso isso; para experimentar, pressione e solteWinKey
e digitepowershell
.(Por outro lado, existem programas como
ConEmu
ouANSICON
que tentam fazer mais: eles “tentam” interceptarConsole-I/O
APIs para fazer com que “aplicativos de console verdadeiros” funcionem também. Isso definitivamente funciona para programas de exemplo de brinquedos; na vida real, isso pode ou não pode não resolver seus problemas específicos. Experiência.)Resumo
definir fonte, layout do teclado (e, opcionalmente, permitir entrada HEX).
use apenas programas que passam por
Console-I/O
APIs e aceitam argumentos de linha de comando Unicode. Por exemplo, qualquercygwin
programa compilado deve estar bem. Como eu já disse, tambémCMD
está bem.UPD: Inicialmente, para um bug
cp65001
, eu estava misturando as camadas Kernel e CRTL ( UPD²: e API do modo de usuário do Windows!). Além disso: o Win8 corrige metade desse bug; Esclarei a seção sobre o aplicativo “melhor console” e adicionei uma referência a como o Python faz isso.fonte
.log
arquivos, é um bug intermitente emzip -ru
não tenho idéia como depurá-lo [?!] -. Ou evitar no futuro ...)Experimentar:
que mudará a página de código para UTF-8. Além disso, você precisa usar as fontes do console Lucida.
fonte
Eu tive o mesmo problema (eu sou da República Tcheca). Eu tenho uma instalação em inglês do Windows e tenho que trabalhar com arquivos em uma unidade compartilhada. Os caminhos para os arquivos incluem caracteres específicos do tcheco.
A solução que funciona para mim é:
No arquivo em lotes, altere a página de conjunto de caracteres
Meu arquivo em lote:
O arquivo em lote deve ser salvo no CP 1250.
Observe que o console não mostrará os caracteres corretamente, mas os entenderá ...
fonte
á
,é
,í
,ó
, eú
.Verifique o idioma para programas não-Unicode. Se você tiver problemas com o russo no console do Windows, defina o russo aqui:
fonte
cmd
, apenas alterna a página de códigos padrão para acp866
qual ainda há um conjunto de caracteres de 8 bits. Ele ainda usa, emcp866
vez decp1251
adicionar, seus próprios problemas.É muito difícil alterar a página de código padrão do console do Windows. Quando você pesquisa na web, encontra propostas diferentes, no entanto, algumas delas podem danificar seu Windows completamente, ou seja, seu PC não inicializa mais.
A solução mais segura é esta: Vá para a chave do Registro
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
e adicione o valor StringAutorun
=chcp 65001
.Ou você pode usar esse pequeno script em lote para as páginas de códigos mais comuns.
Usar em
@chcp 65001>nul
vez dechcp 65001
suprime a saída "Página de código ativa: 65001" que você obteria toda vez que iniciar uma nova janela de linha de comando.Uma lista completa de todos os números disponíveis que você pode obter nos Identificadores da Página de Código
Observe que as configurações serão aplicadas apenas ao usuário atual. Se você deseja defini-lo para todos os usuários, substitua linha
SET ROOT_KEY="HKEY_CURRENT_USER"
porSET ROOT_KEY="HKEY_LOCAL_MACHINE"
fonte
Na verdade, o truque é que o prompt de comando realmente entende esses caracteres que não estão em inglês, apenas não pode exibi-los corretamente.
Quando insiro um caminho no prompt de comando que contém alguns caracteres que não estão em inglês, ele é exibido como "?? ?????? ?????". Quando você envia seu comando (cd "??? ?????? ?????" no meu caso), tudo está funcionando como esperado.
fonte
.cmd
arquivo em lotes, ainda preciso colocarchcp 65001
na parte superior do arquivo em lotes.Em uma máquina Windows 10 x64, fiz com que o prompt de comando exibisse caracteres não ingleses da seguinte maneira:
Abra um prompt de comando elevado (execute o CMD.EXE como administrador). Consulte seu registro para obter fontes TrueType disponíveis no console:
Você verá uma saída como:
Agora precisamos adicionar uma fonte TrueType que suporte os caracteres necessários, como Courier New. Fazemos isso adicionando zeros ao nome da string, portanto, neste caso, o próximo seria "000":
Agora, implementamos o suporte UTF-8:
Defina a fonte padrão como "Courier New":
Defina o tamanho da fonte como 20:
Ative a edição rápida, se desejar:
fonte
Como não vi respostas completas para o Python 2.7, descreverei as duas etapas importantes e uma opcional que é bastante útil.
Defaults
opção Isso também dá acesso às cores. Observe que você também pode alterar as configurações das janelas de comando invocadas de determinadas maneiras (por exemplo, abra aqui, Visual Studio) escolhendoProperties
.cp65001
, que parece ser a tentativa da Microsoft de oferecer suporte a UTF-7 e UTF-8 no prompt de comando. Faça isso executandochcp 65001
no prompt de comando . Uma vez definido, permanece assim até que a janela seja fechada. Você precisará refazer isso sempre que iniciar o cmd.exe.Para uma solução mais permanente, consulte esta resposta no Superusuário. Em resumo, crie uma
REG_SZ
entrada (String) usando regedit emHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
e nomeie-aAutoRun
. Mude o valor dele parachcp 65001
. Se você não quiser ver a mensagem de saída do comando, use@chcp 65001>nul
.Alguns programas têm problemas para interagir com essa codificação, sendo o MinGW notável que falha ao compilar com uma mensagem de erro sem sentido. No entanto, isso funciona muito bem e não causa bugs na maioria dos programas.
fonte
Eu achei esse método útil em novas versões do Windows 10:
Ative este recurso: "Beta: use Unicode UTF-8 para suporte mundial ao idioma"
fonte
Uma opção realmente simples é instalar um shell do Windows bash como o MinGW e usá-lo:
Há um pouco de uma curva de aprendizado, pois você precisará usar a funcionalidade de linha de comando do Unix, mas você adorará o poder dela e poderá definir o conjunto de caracteres do console para UTF-8.
Claro que você também recebe todos os brindes * nix habituais, como grep, find, less, etc.
fonte
Para um problema semelhante, (meu problema era mostrar caracteres UTF-8 do MySQL em um prompt de comando),
Eu resolvi assim:
Alterei a fonte do prompt de comando para o Lucida Console. (Essa etapa deve ser irrelevante para a sua situação. Tem a ver apenas com o que você vê na tela e não com o que realmente é o personagem).
Alterei a página de código para Windows-1253. Você faz isso no prompt de comando por "chcp 1253". Funcionou no meu caso em que eu queria ver o UTF-8.
fonte
Este problema é bastante irritante. Normalmente, tenho caracteres chineses no meu nome de arquivo e conteúdo do arquivo. Observe que estou usando o Windows 10, eis a minha solução:
Para exibir o nome do arquivo , como
dir
ouls
se você instalou o Ubuntu bash no Windows 10Defina a região para suportar caracteres não utf 8.
Depois disso, a fonte do console será alterada para a fonte daquele código do idioma e também mudará a codificação do console.
Depois de executar as etapas anteriores, para exibir o conteúdo do arquivo UTF-8 usando a ferramenta de linha de comando
chcp 65001
type
comando para espiar o conteúdo do arquivo oucat
se você instalou o Ubuntu bash no Windows 10A solução mais preguiçosa: basta usar um emulador de console como http://cmder.net/
fonte
point
comando ainda estão ilegíveis.Vejo várias respostas aqui, mas elas não parecem responder à pergunta - o usuário deseja obter entrada Unicode na linha de comando.
O Windows usa UTF-16 para codificar em duas cadeias de bytes, portanto, você precisa obtê-las no sistema operacional do seu programa. Existem duas maneiras de fazer isso -
1) A Microsoft possui uma extensão que permite ao main obter uma ampla matriz de caracteres: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx
2) Chame a API do Windows para obter a versão unicode da linha de comando wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw
Leia isto: http://utf8everywhere.org para obter informações detalhadas, principalmente se você estiver suportando outros sistemas operacionais.
fonte
A partir de junho de 2019, com o Windows 10, você não precisará alterar a página de códigos.
Consulte " Introdução ao Windows Terminal " (de Kayla Cinnamon ) e o Microsoft / Terminal .
Com o uso da fonte Consolas, parcial será fornecido suporte Unicode.
Conforme documentado na
Microsoft/Terminal
edição 387 :fonte
Uma decisão rápida para os arquivos .bat se o computador exibir o nome do caminho / arquivo correto quando você o digitar na janela do DOS:
Dessa forma, você cria um arquivo .txt - temp.txt. Abra-o no bloco de notas, copie o texto (não se preocupe, ele ficará ilegível) e cole-o no seu arquivo .bat. A execução do .bat criado dessa maneira na janela do DOS funcionou para mim (cirílico, búlgaro).
fonte
Uma coisa melhor para limpar: basta instalar o pacote de idiomas japonês da Microsoft disponível e gratuito. (Outros pacotes de idiomas orientais também funcionarão, mas eu testei o japonês.)
Isso fornece as fontes com os conjuntos maiores de glifos, torna o comportamento padrão, altera as várias ferramentas do Windows, como cmd, WordPad etc.
fonte
Alterar a página de código para 1252 está funcionando para mim. O problema para mim é que o símbolo double doller § está sendo convertido em outro símbolo pelo DOS no Windows Server 2008.
Eu usei o CHCP 1252 e um limite antes dele na minha declaração do BCP ^ §.
fonte
Eu resolvi um problema semelhante ao excluir arquivos nomeados Unicode, consultando-os no arquivo em lotes por seus nomes abreviados (8 pontos 3).
Os nomes abreviados podem ser visualizados fazendo
dir /x
. Obviamente, isso funciona apenas com nomes de arquivos Unicode que já são conhecidos.fonte