Como usar caracteres unicode na linha de comando do Windows?

317

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 ?

Vilx-
fonte
1
@JohannesDewender - Copiar e colar errado?
Vilx-
2
Python 3.6: "o console padrão no Windows aceita todos os caracteres Unicode com essa versão" (bem, a maioria é para mim) MAS você precisa configurar o console: clique com o botão direito do mouse na parte superior das janelas (do cmd ou do python IDLE ), no padrão / fonte, escolha o "console Lucida".
JinSnow
2
@ LưuVĩnhPhúc - Não, trata-se de passar argumentos de linha de comando unicode, em vez de exibir texto no console. O console pode não se envolver.
Vilx-

Respostas:

68

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:

  • CMDe "console" são fatores não relacionados. CMD.exeé apenas um dos programas prontos para "trabalhar dentro" de um console ("aplicativos de console").
  • AFAIK, CMDpossui suporte perfeito para Unicode; você pode inserir / produzir todos os caracteres Unicode quando qualquer página de código estiver ativa.
  • O console do Windows tem MUITO suporte para Unicode - mas não é perfeito (apenas “bom o suficiente”; veja abaixo).
  • 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 problemas cp65001, mas o restante ainda é aplicável ao Win10 .
  • Eu trabalho em 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

  • Para ler / gravar Unicode em um console, um aplicativo (ou sua biblioteca de tempo de execução C) deve ser inteligente o suficiente para usar não a File-I/OAPI, mas a Console-I/OAPI. (Por exemplo, veja como o Python faz isso .)
  • Da mesma forma, para ler argumentos da linha de comando Unicode, um aplicativo (ou sua biblioteca de tempo de execução C) deve ser inteligente o suficiente para usar a API correspondente.
  • A renderização de fonte do console suporta apenas caracteres Unicode no BMP (em outras palavras: abaixo 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:

    • Para saída: uma fonte abrangente de console. Para melhores resultados, recomendo minhas compilações . (As instruções de instalação estão presentes lá - e também listadas em outras respostas nesta página.)
    • Para entrada: um layout de teclado capaz. Para melhores resultados, recomendo meus layouts .
    • Para entrada: permita entrada HEX de Unicode .
  • Mais uma dica com "Colar" em um aplicativo de console (muito técnico):

    • A entrada HEX fornece um caractere KeyUpde Alt; todas as outras maneiras de entregar um personagem acontecem KeyDown; tantas aplicações não estão prontas para ver um personagem KeyUp. (Aplicável apenas a aplicativos que usam Console-I/OAPI.)
    • Conclusão: muitos aplicativos não reagiriam aos eventos de entrada HEX.
    • Além disso, o que acontece com um caractere "Colado" depende do layout atual do teclado: se o caractere puder ser digitado sem o uso de teclas de prefixo (mas com uma combinação arbitrária e complicada de modificadores, como em 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.
    • No entanto, os "outros" caracteres são entregues emulando a entrada HEX .

    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êPastevia 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/OAPIs, 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 solte WinKeye digite powershell.


(Por outro lado, existem programas como ConEmuou ANSICONque tentam fazer mais: eles “tentam” interceptar Console-I/OAPIs 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/OAPIs e aceitam argumentos de linha de comando Unicode. Por exemplo, qualquer cygwinprograma compilado deve estar bem. Como eu já disse, também CMDestá 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.

Ilya Zakharevich
fonte
OK, para algo tão completo, você merece ser a resposta aceita! Impressionante!
Vilx-
5
Sou iniciante em C ++ e não consigo entender essa resposta depois de ler atentamente. Alguém pode me ajudar sobre isso ou fazer uma explicação mais fácil?
Rick
@Bachi Graças a Bachi, descobri que v73 do meu layout de teclado (mencionado acima) estava faltando alguns arquivos de suporte. Agora consertado! (A julgar pelos meus .logarquivos, é um bug intermitente em zip -runão tenho idéia como depurá-lo [?!] -. Ou evitar no futuro ...)
Ilya Zakharevich
@ Rick: Certo! Adicionei um link para uma solução alternativa em Python (mas não consigo encontrar um link direto para o patch no momento ...).
Ilya Zakharevich
@IlyaZakharevich: D Obrigado. Mas, de alguma forma, desisto de usar o Unicode no Windows. Vou usar o Linux posteriormente.
Rick Rick
387

Experimentar:

chcp 65001

que mudará a página de código para UTF-8. Além disso, você precisa usar as fontes do console Lucida.

kgiannakakis
fonte
18
Você sabe se existe uma maneira de tornar isso o padrão?
AnnanFay
82
Observe que há sérios erros de implementação no suporte da página de códigos 65001 do Windows que quebram muitos aplicativos que dependem dos métodos de E / S da biblioteca padrão C, portanto, isso é muito frágil. (Os arquivos em lote também param de funcionar no 65001.) Infelizmente, o UTF-8 é um cidadão de segunda classe no Windows.
bobince
7
@bobince Você tem um exemplo de erro no suporte da página de códigos 65001 do Windows? Estou curioso, porque nunca me deparei com um, e o Google também não apareceu. (Arquivos em lote fazer parar de trabalhar, é claro, mas UTF-8 não é um cidadão de segunda classe ...)
Roman Starkov
17
@romkyns: Meu entendimento é que as chamadas que retornam um número de bytes (como fread / fwrite / etc) realmente retornam um número de caracteres. Isso causa uma ampla variedade de sintomas, como leitura incompleta de entradas, trava no fflush, arquivos em lotes interrompidos e assim por diante. Algum plano de fundo. As páginas de código padrão usadas para os códigos de idioma "multibyte" do CJK têm tratamento especial incorporado para corrigir isso, mas 65001 não - não é suportado .
bobince
7
Porém, uma questão interessante aqui - é o bug porque ele deve reportar bytes e, em vez disso, informa caracteres - ou porque os aplicativos que o utilizam assumiram bytes = caracteres incorretamente? Em outras palavras, é uma falha de API ou um uso de API?
Basic
36

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:

chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp

O arquivo em lote deve ser salvo no CP 1250.

Observe que o console não mostrará os caracteres corretamente, mas os entenderá ...

vanna
fonte
1
Felicidades! Eu precisava disso para poder inserir o caractere de direitos autorais no meu arquivo em lotes.
Lea Hayes
Isso funcionou perfeitamente para mim também em uma situação quase idêntica à sua. Em vez disso o meu caminho continha caracteres gaélico irlandês ou seja á, é, í, ó, e ú.
Seany84
@vanna que resolve meus "caracteres e espaços turcos no caminho do problema de rede". Você é ótimo.
precisa saber é o seguinte
2
Você provavelmente só precisava usar fontes diferentes para também exibir os caracteres corretamente, o Lucida Console funcionou para mim.
Vlastimil Ovčáčík
29

Verifique o idioma para programas não-Unicode. Se você tiver problemas com o russo no console do Windows, defina o russo aqui:

Alterando o Idioma para Programas Não-Unicode

Maxim Yefremov
fonte
6
Isso não habilita o suporte ao Unicode cmd, apenas alterna a página de códigos padrão para a cp866qual ainda há um conjunto de caracteres de 8 bits. Ele ainda usa, em cp866vez de cp1251adicionar, seus próprios problemas.
ivan_pozdeev
1
Veja também me responder abaixo para nova opção em versões mais recentes do Windows 10
zvi 14/04/19
14

É 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 Processore adicione o valor String Autorun= chcp 65001.

Ou você pode usar esse pequeno script em lote para as páginas de códigos mais comuns.

@ECHO off

SET ROOT_KEY="HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

Usar em @chcp 65001>nulvez de chcp 65001suprime 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"

Wernfried Domscheit
fonte
boa idéia e exemplo utilizável também!
13

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.

Do utilizador
fonte
2
Isso provavelmente é um pouco perigoso, pois você pode obter conflitos de nomes. por exemplo, se você tiver dois arquivos, ambos renderizados como "???", e digitar "cd ???" não saberia qual usar (ou pior escolheria um arbitrário).
John John
26
Você não digita ???, você digita o nome real, apenas sendo exibido como ???. Pense nisso como uma caixa de entrada de senha. Tudo o que você digita é exibido como ***, mas enviado é o texto original.
Utilizador
Isso realmente funciona para comandos executados diretamente no prompt de comando. No entanto, com a execução de um .cmdarquivo em lotes, ainda preciso colocar chcp 65001na parte superior do arquivo em lotes.
wisbucky
No seu caso, é um problema de fonte ... o conteúdo está lá, apenas nenhuma fonte adequada para exibi-lo. Mas OP é diferente.
WesternGun 30/10
11

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:

    REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"

Você verá uma saída como:

    0    REG_SZ    Lucida Console
    00    REG_SZ    Consolas
    936    REG_SZ    *新宋体
    932    REG_SZ    *MS ゴシック

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":

    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"

Agora, implementamos o suporte UTF-8:

    REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f

Defina a fonte padrão como "Courier New":

    REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f

Defina o tamanho da fonte como 20:

    REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f

Ative a edição rápida, se desejar:

    REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f
Alon Or
fonte
3
Em geral, o uso da página de códigos 65001 funcionará apenas sem erros no Windows 10 com a atualização Criadores. No Windows 7, haverá erros de saída e entrada. No Windows 8 e versões anteriores do Windows 10, ele possui apenas o bug de entrada, que limita a entrada ao ASCII de 7 bits.
Eryk Sun
6

Como não vi respostas completas para o Python 2.7, descreverei as duas etapas importantes e uma opcional que é bastante útil.

  1. Você precisa de uma fonte com suporte Unicode. O Windows vem com o Lucida Console, que pode ser selecionado clicando com o botão direito do mouse na barra de título do prompt de comando e clicando na Defaultsopçã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) escolhendo Properties.
  2. Você precisa definir a página de código como cp65001, que parece ser a tentativa da Microsoft de oferecer suporte a UTF-7 e UTF-8 no prompt de comando. Faça isso executando chcp 65001no 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_SZentrada (String) usando regedit em HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processore nomeie-a AutoRun. Mude o valor dele para chcp 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.

Aaron3468
fonte
5

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"

Painel de controle -> Configurações regionais -> guia Administrativo -> Alterar local do sistema ...

Configurações da região

zvi
fonte
Como conseguir isso usando o powershell ou o cmd?
Corey
Estou tentando exibir caracteres chineses no console e isso não funcionou no Windows 10 de 64 bits (instalado em turco e posteriormente alterado para inglês). Em seguida, vou tentar instalar o idioma chinês e ver se funciona.
akinuri 25/04
4

Uma opção realmente simples é instalar um shell do Windows bash como o MinGW e usá-lo:

Digite a descrição da imagem aqui

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.

Digite a descrição da imagem aqui

Claro que você também recebe todos os brindes * nix habituais, como grep, find, less, etc.

Steve Barnes
fonte
Nesse caso (antigo), o problema era com um script e não com um console. Usar scripts bash resolveria isso?
Vilx-
Sim, de fato, os scripts bash de madeira podem ser sinalizados como UTF-8 e funcionam com muito mais energia do que os arquivos em lotes do Windows - eu sei que era um caso antigo, mas achei que a opção valia a pena sinalizar para referência futura, pois a MS não parece estar ficando muito melhor no Unicode.
Steve Barnes
grep , encontre e menos .
Peter Mortensen
A saída de caracteres codificados em UTF-8 está correta. Mas a entrada ainda é codificada pela página de códigos do sistema.
Rick
1
Apenas para adicionar que os usuários do Windows já podem ter um shell bash se você usar o Git: basta abrir uma janela Git> Git Bash .
Skomisa # 25/18
3

Para um problema semelhante, (meu problema era mostrar caracteres UTF-8 do MySQL em um prompt de comando),

Eu resolvi assim:

  1. 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).

  2. 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.

Christoforos
fonte
7
Windws-1253 não é uma página de código Unicode. É uma página de código padrão de 256 caracteres. Aparentemente, você usou apenas caracteres que podem ser exibidos nessa página de códigos, mas não será universal.
Vilx-
3

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 dirou lsse você instalou o Ubuntu bash no Windows 10

  1. Defina a região para suportar caracteres não utf 8.

  2. 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

  1. Mude a página para utf-8 chcp 65001
  2. Altere para a fonte que suporta utf-8, como Lucida Console
  3. Use o typecomando para espiar o conteúdo do arquivo ou catse você instalou o Ubuntu bash no Windows 10
  4. Observe que, depois de definir a codificação do console como utf-8, não consigo digitar caracteres chineses no cmd usando o método de entrada chinês.

A solução mais preguiçosa: basta usar um emulador de console como http://cmder.net/

code4j
fonte
Isso não aconteceu para mim. Os caracteres chineses na saída do pointcomando ainda estão ilegíveis.
precisa saber é o seguinte
@SiqingYu Desisto da loucura. Basta usar blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
code4j
Eu usei o Cmder antes, mas ele não pode substituir o console do desenvolvedor usado pelo Visual Studio.
Ssuching Yu
@SiqingYu Você quer dizer o powerShell interativo c #?
code4j
Não é o shell de energia interativo, mas o console do desenvolvedor, usado pelo Visual C ++ também. É o console de depuração padrão nos projetos de aplicativo de console do Win32.
Ssuching Yu
2

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.

Robert Boehne
fonte
Ah, não, desculpe, mas você perdeu a pergunta. Isto é para quando estou escrevendo um programa que receberá os caracteres unicode. Minha pergunta era sobre o envio dos caracteres unicode para outro programa (que, esperançosamente, suporta recebê-los, mas eu realmente não tenho como saber, exceto a desmontagem).
Vilx-
2

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/Terminaledição 387 :

Atualmente, existem 87.887 ideogramas em Unicode. Você precisa de todos eles também?
Precisamos de um limite, e os caracteres além desse limite devem ser tratados por fallback / link de fonte / qualquer coisa que seja.

O que os Consolas devem cobrir:

  • Caracteres usados ​​como símbolos usados ​​pelos programas OSS modernos na CLI.
  • Esses caracteres devem seguir o design e as métricas do Consolas e alinhados adequadamente aos caracteres existentes do Consolas.

O que os Consolas NÃO devem cobrir:

  • Caracteres e pontuação de scripts que, além do latim, grego e cirílico, especialmente caracteres, precisam de formas complexas (como o árabe).
  • Esses caracteres devem ser tratados com fallback de fonte.
VonC
fonte
1

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:

  1. copiar com temp.txt [pressione Enter]
  2. Digite o nome do caminho / arquivo [pressione Enter]
  3. Pressione Ctrl-Z [pressione Enter]

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).

S. Hristov
fonte
1

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.

Mike Beckerle
fonte
1

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 ^ §.

madhav bitra
fonte
Obrigado, funciona! Não sei por que as pessoas rejeitaram isso, é uma alternativa válida para algumas pessoas. Esta página de código 1252 corrige o problema também no Windows Server 2012, onde o mesmo código com o CP 65001 não funcionou para mim. Suponho que depende em qual página de código o script em lote foi editado ou os padrões do SO. Neste caso, foi criado com o bloco de notas em uma máquina alemão MUI com OS de base en-US ..
Tony Muro
0

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.

Michael
fonte