Batch-Skript in Unicode als robustere und universelle Lösung. Vorteile, Nachteile

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

16.03.2016, aktualisiert 16:15 Uhr, 1534 Aufrufe, 2 Kommentare

Hallo,

ist es möglich Batch-Dateien anstatt in ANSI auch in Unicode irgendwie so zu schreiben, sodass sie dann ebenso reibungslos ausgeführt werden können und in der Eingabeaufforderung die Zeichen korrekt angezeigt werden?
Bzw. wo gäbe es eventuelle Probleme? Also was würde gegen Unicode speziell bei Batches sprechen?

Im Windows-Editor lassen sich z. B. beim "Speichern unter" neben ANSI auch folgende Unicode-Kodierungen auswählen:

- Unicode
  • (in Notepad ++ wird die Kodierung als UCS-2 Little Endian angezeigt, was ich aber mit diesem Suchbegriff in Wikipedia erstaunlicherweise nichts finden können, sondern eher, dass Windows-OS generell als Kompromiss zw. UTF-8 und UTF-32 intern auf UTF-16 setz. OK, über "UCS" (Unicode Transformation Format) gibt es dagegen genügend Stoff: https://de.wikipedia.org/wiki/Unicode_Transformation_Format)

- Unicode Big Endian (in Notepad ++ wird die Kodierung als UCS-2 Big Endian angezeigt)
und
- UTF-8

Mir geht es konkret darum das Problem mit den Batch-Dateien, geschrieben auch auf anderen Sprachen, auf PCs umzugehen, auf denen z. B. aktuell ein anderes Sprachschema in den Einstellungen gesetzt ist (die hier gemeinte Einstellung wäre unter Windows 7 z.B.:
Systemsteuerung\Zeit, Sprache und Region > Region und Sprache > Verwaltung > Sprache für Unicode-inkompatible Programme > Gebietsschema ändern
oder direkt als Pfad zu "Regions- und Sprachoptionen":
%systemroot%\system32\control.exe /name Microsoft.RegionalAndLanguageOptions).

In der Windows-Hilfe steht folgendes dazu, aber dies ist für mich nicht gerade hilfreich:
" ;Ändern des Systemgebietsschemas
Das Systemgebietsschema bestimmt den standardmäßigen Zeichensatz (Buchstaben, Symbole und Zahlen) und die Schriftart, die Sie zum Eingeben von Informationen verwenden und die zum Anzeigen von Informationen in Programmen verwendet werden, die nicht Unicode verwenden. Auf diese Weise können Nicht-Unicode-Programme mit der angegebenen Sprache auf dem Computer ausgeführt werden. Möglicherweise müssen Sie das standardmäßige Systemgebietsschema ändern, wenn Sie zusätzliche Anzeigesprachen auf Ihrem Computer installieren. Wenn Sie eine andere Sprache für das Systemgebietsschema auswählen, hat dies keine Auswirkung auf die Sprache in den Menüs und Dialogfeldern von Windows oder anderen Programmen, die Unicode verwenden.
"

Ich will ja letztendlich, dass wenn ich in einem Batch-Skript auf einem Rechner auf Deutsch in Unicode schreibe und dieses schließlich ausführe, dass mir dann in der Eingabeaufforderung auch die Umlauten korrekt angezeigt werden und dass die intern gesetzte Pfade mit Umlauten auch korrekt verarbeitet werden.
Bisher beim Abspeichern mit einer ANSI-Kodierung schreibe ich in jeder Batch-Datei in der Kopfzeile chcp 1252, um die Verwendung der "westeuropäischen" Codepage zu erzwingen. Aber wie gesagt dies ist alles echt eine Sackgasse auf Rechnern mit anderem Gebietsschema: All dies funktioniert reibungslos nur auf Rechnern, bei denen das Gebietschema in Windows auf "Deutsch" gesetzt ist. Ist dies nicht der Fall, verwandelt sich die Datei beim Bearbeiten einfach in Kriksel-Kraksel, mit undefinierten Buchstaben oder schlimmsten nur Fragezeichen, je nachdem und dann fang mal an…

Also wenn ich mich auf Betriebssysteme (ab zumindest Windows 7) begrenzen würde, gäbe es da bei der Auswahl einer vernünftigen Kodierung universelle/robuste Lösungen und welche soll diese dann lieber sein?
Und muss dann die Codepage im Batch-Skript explizit gesetzt sein und welche wäre sie z. B. für Deutsch (bzw. wie kann die nötige Codepage ermittelt werden)?

Mit mehreren Experimenten ist es mir nämlich nicht gelungen in den letzen paar Monaten eine brauchbare Unicode-Lösung zu finden, weil immer irgendwelche Probleme aufgetaucht waren (habe mir leider nicht alles systematisch notiert). Daher benutze ich nachwievor ANSI-Kodierung, in der Kombination mit chcp 1252 in der Kopfzeile. Aber wie gesagt, dies läuft dann auf anderen Sprachumgebungen eben nicht. Da muss genauso gebastelt werden und noch ein Problem dabei ist, dass die Scripts mehrfach angelegt werden müssen bzw. nur umständlich verwaltet werden können :-( face-sad. Also um ein Batch-Skript, das auf einer anderen Sprache geschrieben ist, ändern zu können, muss ich erst das Gebietsschema ändern und sogar ein Neustart durchführen.

Daher versuche ich mal wieder hier im Forum wie immer eine hilfreiche Antwort zu finden.

Viele Grüße
evinben
Mitglied: SamvanRatt
16.03.2016 um 22:09 Uhr
Hi evinben
ich kenne dein Problem; eine wirkliche Lösung kenne ich aber nicht.
chcp 65001 (=UTF-8 Seite) ist eine Möglichkeit, ABER die cmd.exe kennt nur sehr begrenzt unicode. TCC (=4nt Nachfolger) kennt unicode, ist aber wieder nicht Standard. Wenn du dich (sprachlich) fortbewegen kannst/willst wäre die powershell gut: voll Unicode fähig und einen gewaltigen Umfang an OS Manipulationen. Ich arbeite seit 1991 mit 4nt/tcc und schleppe es via UNC mit mir herum und muß daher nicht von meiner gewohnten Umgebung abweichen, ps ist aber in jedem Fall die modernere Wahl und ab W7 ja überall dabei (ich muß dagegen noch bis DOS5.0 und NT3.51 abdecken).
Sofern du in deinen Batches auch externe Programme aufrufst/abgreifst bist du da wieder beim kleinsten gemeinsamen Nenner....
Gruß
Sam
Bitte warten ..
Mitglied: rubberman
16.03.2016, aktualisiert um 22:17 Uhr
Hallo evinben,

willkommen in der wunderbaren Welt von Windows. Während die cmd.exe intern mit Unicode umgehen kann, darf ein Batchscript nur in einer Singlebyte Codierung vorliegen. Und selbst wenn du eine Codepage gefunden hast, die bestimmte von dir benötigte Zeichen enthält, heißt das noch längst nicht, dass du für das Windows Consolefenster eine Schriftart einstellen kannst, die diese Zeichen unterstützt. Dazu kommt noch, dass Texteditoren deinen Scriptcode in einer anderen Codierung ablegt, wie er in der CMD geparst wird. Aber das weißt du ja bereits.
Lange Rede kurzer Sinn, du wirst es nicht schaffen deine Batch Scripts unabhängig von Locale Einstellungen zu schreiben. Schade um die Zeit die du investierst, glaub mir.

Du kannst noch ein bisschen spielen, wenn du willst.
Nun hast du 2 Variablen deren Inhalt dir bekannt vorkommen sollte und die du mit CHCP verwursten kannst. Hilft dir am Ende aber auch nicht wesentlich weiter ...

Grüße
rubberman
Bitte warten ..
Heiß diskutierte Inhalte
Sicherheit
Verpackter Laptop entwendet
r0x3llVor 1 TagFrageSicherheit10 Kommentare

Hallo. Mir wurde aus dem Büro ein noch verpackter Dell XPS Laptop mit einem Wert von ca 3.500€ gestohlen. Kann man da was orten? ...

Windows 10
Netzwerkzugriff intern extern blockiert nach Aufbau NordVPN Verbindung
gelöst Slavik-10Vor 1 TagFrageWindows 1030 Kommentare

hallo Leute, ich habe mir vor kurzem ein VPN Anbieter bestellt. Das Problem an der ganzen Sache ist, sobald eine VPN Verbindung zu einem ...

Off Topic
Namenskonzept Kundengeräte
bitnarratorVor 1 TagFrageOff Topic5 Kommentare

Hallo, ich möchte gerne einmal die Diskussion anstoßen, weil ich eine hier in diese Richtung noch nichts gefunden habe. Es geht um die Bennenung ...

Netzwerkgrundlagen
Router für neues Heimnetzwerk - was will man 2021 haben?
billy01Vor 1 TagFrageNetzwerkgrundlagen7 Kommentare

Guten Abend zusammen, nachdem sich bei mir viel getan hat, stehe ich nun vor einem Umzug und dem Neuaufbau meines Heimnetzwerkes. Also weg von ...

Windows Server
Kein Internetzugriff bei einem Domänenclient
KerberoVor 1 TagFrageWindows Server15 Kommentare

Hallo community, ich habe ein ganz komisches Verhalten eines Clients bei mir. Ich habe eine kleine Domäne (6 Clients und ein Windows Server 2016 ...

LAN, WAN, Wireless
2x Fritzbox 7590 mit separatem DSL über WAN verbinden
gelöst FailixVor 18 StundenFrageLAN, WAN, Wireless19 Kommentare

Liebes Administrator Forum, Ich bin schon länger passiver Lese und habe mich jetzt entschlossen mit einer Frage den ersten Post hier zu schreiben. Über ...

LAN, WAN, Wireless
Cat 7 Patchkabel mit nur 11MBits im Download
gelöst RickHHVor 15 StundenFrageLAN, WAN, Wireless7 Kommentare

Moin zusammen, ich habe mir soeben ein paar Patchkabel (aus einem Cat 7 Kabel) fertig gemacht. Die Belegung ist: 1 weiß/grün 2 grün 3 weiß/orange 4 blau 5 weiß/blau ...

DNS
Network Scanner zeigt falschen Hostname an
gelöst vafk18Vor 18 StundenFrageDNS10 Kommentare

Ich habe in meinem Netzwerk 3 Fritzboxen im Betrieb. Die Fritzboxen haben in den Einstellungen als Namen "fb7270", "fb7369" und "fb7412". Jede Fritzbox hat ...