Quale codifica per far funzionare Å Ä Ö


12

Sto scrivendo una piccola applicazione in VB.net che mi permetterà di creare facilmente un utente "account Windows 7" con una password, invece di passare attraverso il pannello di controllo. Il problema che sto riscontrando è che quando creo un file bat in VB.net usando la codifica UTF-8 non scrive å ä ö come dovrebbe essere. Ho provato tutte le codifiche che riesco a trovare ma non riesco a farlo funzionare.

Se qualcuno ha un'idea del perché sto ricevendo questo, per favore fatemelo sapere. Grazie in anticipo!


prova a pubblicare su stackoverflow.com e mostra il tuo script.
Toby Allen,

1
@Toby Allen Beh, in realtà non è una domanda di programmazione ma una domanda sulla codifica del testo, lo stesso problema si verifica quando creo un file .bat in modo "normale".
kagstrom2100,

Risposte:


12

Edit: mi sbagliavo;)
cmd.exenon accetta UTF-8, ma è necessario essere sicuri di salvarlo , senza l' BOMall'inizio del file.

Ecco un secondo test. È possibile utilizzare chcp 65001all'inizio del file batch.

inserisci qui la descrizione dell'immagine


Un file batch non può essere di tipo UTF-8. Deve essere ASCII. Cmd.exesemplicemente non accetta un altro formato. Ho fatto un piccolo test e puoi usare i tuoi personaggi ma ha bisogno di un po 'di lavoro.

Crea un file test.batcon echo Å Ä Ö. Salvalo con il formato ANSI/ASCII. Apri a cmd.exee assicurati dei tuoi cmd.exeusi Lucida Console(per visualizzare i caratteri Unicode).

Quando si digita il file mostrerà i caratteri come i vecchi caratteri DOS. Puoi vedere una tabella di traduzione qui .

Quando si passa a una "Ansi di Windows", la tabella codici (ovvero il latino dell'Europa occidentale) con chcp 1252i caratteri viene visualizzata correttamente. Se vengono anche trasferiti alle rispettive utility dipende da tale utility.

Ma perché stai creando un file batch per questo? Non puoi semplicemente codificarlo in VB.net?

cmd.exe


Modifica 2 #:

Questo è il modo di impostare Lucida Consolein cmd.exe:

Lucida Console


L' BOMsono 3 caratteri all'inizio di un file UTF-8. ( \xEF\xBB\xBF).
In VB.net dovresti creare un file senza un BOMsimile:

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using

Ciao e grazie per la risposta. Nella mia applicazione vb.net sto cercando di creare un file .bat con i comandi: net user "nome utente" net localgroup adminatörer "type" / aggiungi Il motivo per cui devo usare la parola svedese adminstratörer invece di administ è perché localgroup ha vinto prendi la traduzione inglese come gruppo.
kagstrom2100,

Ho pensato che passare attraverso un file .bat fosse un po 'troppo quando potevi farlo direttamente da VB.net. Come qui . Molti esempi anche su Google . Quindi non c'è bisogno di creare un pipistrello come intermediario. E con quegli esempi potresti alimentare il nome Unicode direttamente alla funzione Windows. (A meno che non sia necessario eseguire il .bat in un altro momento separato dall'app VB.net per qualche motivo?)
Rik

Bene, da giorni cerco un modo per farlo in VB.net su Google, anche se non ho trovato alcun modo per farlo. Ho già provato l'esempio che hai collegato e non sembra funzionare. Come posso assicurarmi che il file .bat non usi la BOM? Cos'è anche Lucida Console? L'unica informazione che ho trovato al riguardo è che si tratta di un carattere. Quando provo la cosa esatta che hai fatto nel secondo esempio / immagine, ottengo questo i.imgur.com/6sh20j0.jpg
kagstrom2100

Ho aggiunto alla mia risposta l'inclusione Lucida Consolee la creazione di file senza BOM(Modifica n. 2, in fondo). Ma la creazione di questo utente net userfunziona tramite il prompt dei comandi? E cosa non funziona se lo crei tramite VB.net? Per questo avremmo bisogno di un codice di esempio (o di una domanda separata) perché dovrebbe funzionare. (A proposito hai collegato la mia immagine, non la tua, credo, nel tuo commento)
Rik

2
@JohnLBevan Sì, hai ragione. Apparentemente findnon gestisce l'input UTF-8 non troppo bene. Ma puoi usare findstr. In questo modo:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik

2

La cosa che ha risolto questo problema per me è stata quella di salvare il file come UTF-8 senza BOM e usando questo codice

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

La cosa che non avevo usato prima era @echo off in modo che e usando chcp 65001 sia stato risolto! Grazie anche a Rik per tutto l'aiuto :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.