Caracteres estranhos (´╗┐) no início de um arquivo em lotes [duplicado]

30

Estou trabalhando com arquivos em lotes no Windows, usando o Notepad e o Notepad ++. Quando executo os arquivos em lote, com os quais todos começam @echo off, vejo a primeira linha (quando executada em duas máquinas separadas) lendo ´╗┐@echo offe, em seguida, todas as linhas REM abaixo também aparecem.

Tentei alterar a codificação no Notepad ++, mas alega que eles já estão na codificação UTF-8, que parece estar correta.

O que preciso fazer para que esses arquivos funcionem corretamente?

O canadense Luke REINSTATE MONICA
fonte
@luu minha pergunta é sobre o bloco de notas ++ especificamente
Luke Luke REINSTATE MONICA
Observe que o Bloco de notas comum, ao salvar com UTF8, não permite salvar sem BOM e adicionará esses caracteres.
dmcontador 20/09

Respostas:

26

Parece com a codificação DOS ASCII da Byte Order Mark para UTF-8 (0xEF 0xBB 0xBF): http://en.wikipedia.org/wiki/Byte_order_mark

No Notepad ++, tente codificá-lo como "UTF-8 sem BOM" ou como ASCII simples. Acho que o uso da BOM para UTF-8 é desencorajado por esse motivo, não é exatamente compatível com o ASCII.

baochan
fonte
2
Absolutamente certo, exceto que 'DOS ASCII' é a página de códigos 850 do DOS, como mostra a experimentação em Python:>>> print u'\ufeff'.encode('utf8').decode('cp850') ´╗┐
deltab
@deltab Ah, boa descoberta. Eu não tinha certeza de como a codificação era chamada especificamente, só que eu não tinha visto os caracteres de arte de linha ╗┐desde os dias do MS-DOS 5 / Windows 3.11. O Windows moderno deve executar arquivos em lote com essa codificação para compatibilidade?
Baochan
1
Eu me deparei com isso ao usar o Visual Studio para criar um novo arquivo de texto.
Sam Goldberg
9

Acontece que ele precisa ser definido como codificação ANSI para funcionar corretamente. Para definir isso, escolhi Codificação -> Codificar em ANSI .

Para descobrir isso, tentei criar um arquivo em lotes na linha de comando.

echo @echo off > batch.bat
echo REM Some comment... >> batch.bat
echo echo Hello world! >> batch.bat

Abri esse arquivo no Notepad ++ e verifiquei a codificação no canto inferior direito, que dizia ANSI como UTF-8 . Não sei por que adiciona esse último bit, mas parece funcionar agora.

O canadense Luke REINSTATE MONICA
fonte
ANSI não é realmente uma codificação. Presumivelmente, refere-se à página de código padrão do seu sistema Windows . Isso varia de um sistema para outro, dependendo da configuração.
Cody Grey
Isso não está correto. A BOM é um conjunto de caracteres que codifica artefato.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Quem está incorreto, eu ou Cody?
Canadian Luke REINSTATE MONICA