Edit: Eu estava errado;)
cmd.exe
aceita UTF-8, mas você precisa salvá-lo sem o BOM
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
com echo Å Ä Ö
. Salve-o com o formato ANSI/ASCII
. Abra a cmd.exe
e verifique se seus cmd.exe
usos Lucida 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
em cmd.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:
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
'^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
sink.WriteLine("...")
End Using