Welche Kodierung, um Å Ä Ö zum Laufen zu bringen

12

Ich schreibe eine kleine Anwendung in VB.net, mit der ich einfach ein Benutzer- "Windows 7-Konto" mit einem Kennwort erstellen kann, anstatt das Kontrollfeld zu durchlaufen. Das Problem, das ich habe, ist, dass wenn ich eine Bat-Datei in VB.net mit UTF-8-Codierung erstelle, sie nicht so schreibt, wie es angenommen wird. Ich habe alle Codierungen ausprobiert, die ich finden kann, kann sie jedoch nicht zum Laufen bringen.

Wenn jemand eine Idee hat, warum ich das bekomme, lass es mich wissen. Vielen Dank im Voraus!

kagstrom2100
quelle
Versuchen Sie, auf stackoverflow.com zu posten, und zeigen Sie Ihr Skript.
Toby Allen
1
@Toby Allen Nun, es ist nicht wirklich eine Programmierfrage, sondern eine Frage zum Codieren von Text. Das gleiche Problem tritt auf, wenn ich eine .bat-Datei auf "normale" Weise erstelle.
kagstrom2100

Antworten:

12

Bearbeiten: Ich habe mich geirrt;)
cmd.exeakzeptiert UTF-8, aber Sie müssen sicher sein, es ohne das BOMam Anfang der Datei zu speichern.

Hier ist ein zweiter Test. Sie können chcp 65001am Anfang Ihrer Batch-Datei verwenden.

Geben Sie hier die Bildbeschreibung ein


Eine Batchdatei kann nicht vom Typ UTF-8 sein. Es muss ASCII sein. Cmd.exeakzeptiert einfach kein anderes Format. Ich habe einen kleinen Test gemacht und du kannst deine Charaktere benutzen, aber es braucht etwas Arbeit.

Machen Sie eine Datei test.batmit echo Å Ä Ö. Speichern Sie es mit Format ANSI/ASCII. Öffnen Sie a cmd.exeund stellen Sie sicher, dass Sie es cmd.exeverwenden Lucida Console(um die Unicode-Zeichen anzuzeigen).

Wenn Sie die Datei eingeben, werden Zeichen als alte DOS-Zeichen angezeigt. Sie können eine Übersetzung Chart sehen hier .

Wenn Sie zu einer "Windows Ansi" - Codepage (dh westeuropäisches Latein) wechseln, werden chcp 1252die Zeichen korrekt angezeigt. Ob sie auch zu ihren jeweiligen Dienstprogrammen übertragen werden, hängt von diesem Dienstprogramm ab.

Aber warum erstellen Sie dafür eine Batch-Datei? Können Sie es nicht einfach in VB.net codieren?

cmd.exe


Bearbeiten 2 #:

Dies ist , wie Sie festgelegt Lucida Consolein cmd.exe:

Lucida-Konsole


Das BOMsind 3 Zeichen am Anfang einer UTF-8-Datei. ( \xEF\xBB\xBF).
In VB.net würden Sie eine Datei erstellen , ohne eine BOMwie folgt aus :

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
Rik
quelle
Hallo und danke für die Antwort. In meiner vb.net-Anwendung versuche ich, eine .bat-Datei mit den folgenden Befehlen zu erstellen: net user "Benutzername" net localgroup administratörer "type" / add Der Grund, warum ich das schwedische Wort adminstratörer anstelle von administator verwenden muss, ist beause localgroup won Nehmen Sie die englische Übersetzung nicht als Gruppe.
kagstrom2100
Ich dachte nur, eine .bat-Datei durchzugehen wäre ein bisschen viel, wenn man dies direkt von VB.net aus tun könnte. Wie hier . Viele Beispiele auch in Google . Sie müssen also keine .bat als Middle-Man erstellen. Und mit diesen Beispielen könnten Sie den Unicode-Namen direkt der Windows-Funktion zuführen. (Es sei denn, Sie müssen die .bat aus irgendeinem Grund zu einem anderen Zeitpunkt als Ihre VB.net-App ausführen?)
Rik
Nun, ich habe seit Tagen nach einer Möglichkeit gesucht, dies in VB.net bei Google zu tun, obwohl ich keine Möglichkeit gefunden habe, dies zu tun. Ich habe das von Ihnen verlinkte Beispiel bereits ausprobiert und es schien nicht zu funktionieren. Wie stelle ich sicher, dass die .bat-Datei keine Stückliste verwendet? Was ist auch die Lucida-Konsole? Die einzige Information, die ich darüber finden konnte, ist, dass es sich um eine Schriftart handelt. Wenn ich genau das versuche, was Sie im zweiten Beispiel / Bild getan haben,
erhalte
Ich habe meiner Antwort hinzugefügt, um Lucida Consoleohne und ohne Datei zu erstellen BOM(Bearbeiten Nr. 2 unten). Aber funktioniert das Erstellen dieses Benutzers über net userdie Eingabeaufforderung? Und was funktioniert nicht, wenn Sie es über VB.net erstellen? Dafür benötigen wir einen Beispielcode (oder eine separate Frage), da dies funktionieren sollte. (Übrigens haben Sie mein Bild verlinkt, nicht Ihr Bild, glaube ich, in Ihrem Kommentar)
Rik
2
@ JohnLBevan Ja, du hast recht. Anscheinend findgeht UTF-8-Eingabe nicht so gut. Aber du kannst verwenden findstr. So:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik
2

Die Sache, die dies für mich behoben hat, war, die Datei als UTF-8 ohne Stückliste zu speichern und diesen Code zu verwenden

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

Das, was ich vorher nicht benutzt habe, war @echo aus, so dass und die Verwendung von chcp 65001 das Problem behoben hat! Danke auch Rik für all die Hilfe :)

kagstrom2100
quelle