Estou escrevendo um pequeno aplicativo no VB.net que me permitirá criar facilmente uma "conta do Windows 7" com uma senha, em vez de ir pelo painel de controle. O problema que estou tendo é que, quando crio um arquivo bat no VB.net usando a codificação UTF-8, ele não grava como deveria. Eu tentei todas as codificações que posso encontrar, mas não consigo fazê-lo funcionar.
Se alguém tiver uma idéia de por que estou recebendo isso, entre em contato. Thanx adiantado!
Respostas:
Edit: Eu estava errado;)
cmd.exe
aceita UTF-8, mas você precisa salvá-lo sem oBOM
no início do arquivo.Aqui está um segundo teste. Você pode usar
chcp 65001
no início do seu arquivo em lotes.Um arquivo em lotes não pode ser do tipo UTF-8. Ele precisa ser ASCII.
Cmd.exe
simplesmente não aceita outro formato. Fiz um pequeno teste e você pode usar seus personagens, mas ele precisa de algum trabalho.Faça um arquivo
test.bat
comecho Å Ä Ö
. Salve-o com o formatoANSI/ASCII
. Abra acmd.exe
e verifique se seuscmd.exe
usosLucida Console
(para exibir os caracteres Unicode).Quando você digita o arquivo, ele mostra caracteres como os caracteres antigos do DOS. Você pode ver um gráfico de tradução aqui .
Quando você alterna para uma página de código "Windows Ansi" (ou seja, latim da Europa Ocidental) com
chcp 1252
os caracteres é exibida corretamente. Se eles também forem transferidos para seus respectivos utilitários, depende desse utilitário.Mas por que você está criando um arquivo em lotes para isso? Você não pode simplesmente codificá-lo no VB.net?
Editar 2 #:
Isto é como você definir
Lucida Console
emcmd.exe
:O
BOM
são 3 caracteres no início de um arquivo UTF-8. (\xEF\xBB\xBF
)Em VB.net você criar um arquivo sem um
BOM
como este:fonte
Lucida Console
e criar arquivos semBOM
(Edit # 2, na parte inferior). Mas a criação desse usuário vianet user
trabalho no prompt de comando? E o que não funciona se você o criar via VB.net? Para isso, precisaríamos de algum código de exemplo (ou uma pergunta separada) porque isso deve funcionar. (BTW é ligada a minha imagem, não o seu, eu acho que, em seu comentário)find
, não suporta muito bem a entrada UTF-8. Mas você pode usarfindstr
. Assim:ping 127.0.0.1 -n 2 | findstr /C:" = "
O que corrigi isso para mim foi salvar o arquivo como UTF-8 sem BOM e usar esse código
O que eu não usei antes foi @echo off, de modo que o chcp 65001 foi o que o corrigiu! Thanx também Rik por toda a ajuda :)
fonte