Qual codificação para obter o trabalho

12

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!

kagstrom2100
fonte
tente postar no stackoverflow.com e mostre seu script.
Toby Allen
1
@ Allen Allen Bem, não é realmente uma questão de programação, mas uma questão sobre a codificação de texto, o mesmo problema ocorre quando eu crio um arquivo .bat da maneira "normal".
kagstrom2100

Respostas:

12

Edit: Eu estava errado;)
cmd.exeaceita UTF-8, mas você precisa salvá-lo sem o BOMno início do arquivo.

Aqui está um segundo teste. Você pode usar chcp 65001no início do seu arquivo em lotes.

insira a descrição da imagem aqui


Um arquivo em lotes não pode ser do tipo UTF-8. Ele precisa ser ASCII. Cmd.exesimplesmente 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.batcom echo Å Ä Ö. Salve-o com o formato ANSI/ASCII. Abra a cmd.exee verifique se seus cmd.exeusos 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 1252os 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?

cmd.exe


Editar 2 #:

Isto é como você definir Lucida Consoleem cmd.exe:

Lucida Console


O BOMsão 3 caracteres no início de um arquivo UTF-8. ( \xEF\xBB\xBF)
Em VB.net você criar um arquivo sem um BOMcomo este:

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
Rik
fonte
Oi e obrigado pela resposta. No meu aplicativo vb.net, estou tentando criar um arquivo .bat com os comandos: net user "nome de usuário" net localgroup administratörer "type" / add O motivo pelo qual tenho de usar a palavra sueca adminstratörer em vez de administator é leve a tradução para o inglês como um grupo.
kagstrom2100
Só pensei em passar por um arquivo .bat era um pouco demais quando você poderia fazer isso diretamente do VB.net. Como aqui . Muitos exemplos no Google também. Portanto, não há necessidade de criar um .bat como intermediário. E com esses exemplos, você pode alimentar o nome Unicode diretamente na função Windows. (A menos que você precisa para executar o .bat em um momento diferente, separado do VB.net app para alguma razão?)
Rik
Bem, eu tenho procurado uma maneira de fazer isso no VB.net no Google há dias, embora eu não tenha encontrado nenhuma maneira de fazê-lo. Eu já tentei o exemplo que você vinculou e não parecia funcionar. Como garantir que o arquivo .bat não use a BOM? Também o que é o Lucida Console? A única informação que pude encontrar sobre isso é que é uma fonte. Quando tento a coisa exata que você fez no segundo exemplo / imagem eu recebo este i.imgur.com/6sh20j0.jpg
kagstrom2100
Eu adicionei à minha resposta para incluir Lucida Consolee criar arquivos sem BOM(Edit # 2, na parte inferior). Mas a criação desse usuário via net usertrabalho 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)
Rik
2
@JohnLBevan Sim, você está certo. Aparentemente find, não suporta muito bem a entrada UTF-8. Mas você pode usar findstr. Assim:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik
2

O que corrigi isso para mim foi salvar o arquivo como UTF-8 sem BOM e usar esse código

@echo off
chcp 65001
net user Linus /add
net localgroup Administratörer Test/add

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

kagstrom2100
fonte