Befehl: uni2asci
USBDOS ist eine Sammlung verschiedener USB-Treiber und Tools:
UNI2ASCI versucht, einen Unicode-String (16-Bit-Zeichen) in einen
ASCII-String (7-Bit-Zeichen) zu konvertieren.
Syntax:
UNI2ASCI [Optionen]
Optionen:
Dieses Programm versucht, einen Unicode-String (16-Bit-Zeichen) in
einen ASCII-String (7-Bit-Zeichen) zu konvertieren. Da sich Unicode
und ASCII stark voneinander unterscheiden, ist die Übersetzung nicht
immer genau oder vollständig. Trotz dieser Mängel kann Ihnen dieses
Programm helfen zu erkennen, was ein Unicode-String Ihnen möglicher-
weise sagen möchte. Der zu konvertierende Unicode-String muss mit ei-
nem NULL-Zeichen (0000h) abgeschlossen sein und sich im Speicher be-
finden. Sie müssen UNI2ASCI die hexadezimale Speicheradresse
(#Segment:#Offset) mitteilen, unter der der Unicode-String gespeichert
ist (z. B. "UNI2ASCI 1234:5678").
Die ASCII-Ausgabe wird normalerweise auf dem Bildschirm ausgegeben,
kann aber mit den üblichen DOS-Umleitungs- und Pipe-Methoden umgeleitet
werden. Bei Ausführung innerhalb eines anderen Programms (wenn nicht
über die Kommandozeile) kann der hexadezimalen Speicheradresse eine
hexadezimale Rückrufadresse folgen, an die die Ausgabe geschrieben
wird.
Kommentar:
UNI2ASCI ist ein Programm, das Unicode-Zeichenfolgen in ASCII-Zeichen-
folgen umwandelt, so daß sie in normalen DOS-Programmen angezeigt und
gedruckt werden können. Wenn sich der Bildschirm des Computers im Text-
modus befindet (was bei den meisten DOS-Programmen der Fall ist), muß
jedes Zeichen, das auf dem Bildschirm angezeigt wird, aus einem Satz
von 256 Möglichkeiten (8-Bit-Zeichen) ausgewählt werden. Der gesamte
Satz von 256 Möglichkeiten wird als Codepage bezeichnet. Die Standard-
Codepage, die DOS verwendet, ist die Codepage 437 für das amerikani-
sche Englisch. Für DOS sind auch viele andere Codepages verfügbar,
und es gibt verschiedene DOS-Dienstprogramme zum Ändern und Steuern
der Codepages (NLSFUNC, COUNTRY, CHCP usw.).
Der ASCII-Zeichensatz ist eigentlich auf 128 Zeichen (7 Bits) begrenzt.
Für jede Codepage entsprechen die ersten 128 (von 256 möglichen) Zei-
chen direkt den ASCII-Zeichen. Dazu gehören verschiedene Steuerzeichen
(Escape, Carriage Return, Form Feed usw.), Groß- und Kleinbuchstaben
(a-z), Zahlen (0-9) und verschiedene Interpunktionszeichen (Punkte,
Kommas, Klammern usw.). Die zweiten 128 Zeichen jeder Codepage sind
bei jeder Codepage unterschiedlich, aber umfassen im Allgemeinen kas-
tenförmige Zeichen, akzentuierte Buchstaben und Zahlen (Zeichen mit
Akut-, Gravis-, Diäresiszeichen usw.) und verschiedene andere Zeichen.
So ist beispielsweise die Codepage 869 speziell für die griechische
Sprache konzipiert und enthält das gesamte griechische Alphabet in
Groß- und Kleinbuchstaben (die Codepage 437 enthält einige griechi-
sche Zeichen, aber nicht das gesamte griechische Alphabet).
Der Unicode-Zeichensatz erlaubt 20 Bits für jedes Zeichen, was insge-
samt 1.048.576 Möglichkeiten ergibt. Dies beinhaltet die Unterstützung
für alle Arten von Sprachen, für die es keine DOS-Codepages gibt, wie
Arabisch, Chinesisch und Cherokee. 20 Bits sind eine ungewöhnliche Zahl
in der Welt der Programmierung, daher hat die Unicode-Organisation drei
verschiedene Arten der "Kodierung" von Unicode-Zeichen entwickelt:
UTF-32, UTF-16 und UTF-8. UTF-32 kodiert ein 20-Bit-Unicode-Zeichen in
einen 32-Bit-Raum, indem die oberen 12 Bits einfach ignoriert werden
(sie werden zu 0). UTF-16 kodiert 20-Bit-Zeichen in 16-Bit-Wörter, in-
dem bestimmte Unicode-Zeichen zwei 16-Bit-Wörter statt nur eines benö-
tigen (d. h. die Länge eines einzelnen Unicode-Zeichens ist variabel).
UTF-8 funktioniert ähnlich und kodiert ein einzelnes 20-Bit-Unicode-
Zeichen als 8-Bit-Byte-Zeichenfolge variabler Länge.
Zusätzlich zu den Kodierungen UTF-8, UTF-16 und UTF-32 können Unicode-
Zeichen entweder Little-Endian oder Big-Endian kodiert werden. Die
Endianness ergibt sich aus der Art und Weise, wie verschiedene Prozes-
soren Zahlen speichern. Intel-kompatible CPUs speichern Zahlen immer
Little-Endian, während bestimmte andere CPUs (wie Motorola) sie Big-
Endian speichern. Bei UTF-8 spielt das Endian-Format keine Rolle. Bei
UTF-16 und UTF-32 gibt es "Unterkategorien": UTF-16 LE, UTF-16 BE,
UTF-32 LE und UTF-32 BE.
Um eine Unicode-Zeichenkette korrekt zu dekodieren, muss das Dekodier-
programm (in diesem Fall UNI2ASCI) wissen, wie die Zeichenkette kodiert
ist (UTF-8, UTF-16 LE, UTF-16 BE, UTF-32 LE oder UTF-32 BE), sonst kann
es sie nicht korrekt dekodieren. Normalerweise ist es für ein Dekodier-
programm nicht möglich, das Kodierschema automatisch zu bestimmen. Wenn
ein Dekodierungsprogramm jedoch die Anzahl der Bits pro Zeichen im Ko-
dierungsschema (UTF-8, UTF-16 oder UTF-32) kennt, kann (muss aber
nicht) das erste Zeichen in der Zeichenkette ein Sonderzeichen enthal-
ten, das dem Dekodierungsprogramm mitteilt, ob es sich um Big-Endian
oder Little-Endian handelt.
UNI2ASCI nimmt eine Unicode-Zeichenkette, die irgendwo im Speicher abge-
legt ist, dekodiert sie und zeigt sie so gut wie möglich auf dem Bild-
schirm an. Das heißt, UNI2ASCI nimmt jedes Unicode-Zeichen, und wenn es
einem Zeichen ähnelt, das mit der aktuellen DOS-Codepage auf dem Bild-
schirm angezeigt werden kann, zeigt UNI2ASCI es als dieses Zeichen auf
dem Bildschirm an. Wenn es kein Codepage-Zeichen gibt, das dem Unicode-
Zeichen ähnlich ist, zeigt UNI2ASCI das Zeichen als "{U+####}" an,
wobei ##### die hexadezimale Zahl des Unicode-Zeichens ist ("U+####"
ist eine Standardmethode, um Unicode-Zeichen im Allgemeinen auszu-
drücken). Handelt es sich bei dem Unicode-Zeichen um ein Steuerzeichen,
wird die hexadezimale Zahl zusammen mit dem üblichen Akronym zur Be-
schreibung des Steuerzeichens angezeigt (zum Beispiel "{1B=ESC}" für
das Escape-Zeichen). Der Unicode-Zeichensatz ist in "Regionen" unter-
teilt, in denen bestimmte Zeichen (Zahlen) reserviert, privat, unzu-
lässig usw. sind. Wenn UNI2ASCI auf eines dieser "besonderen" Zeichen
stößt, wird die hexadezimale Nummer des Zeichens zusammen mit einer
entsprechenden Beschreibung angezeigt (z. B. "{F603=Private}"). Wenn
Sie weitere Einzelheiten zu diesem Thema erfahren möchten, sollten Sie
die Unicode-Spezifikation lesen.
Es gibt direkte Beziehungen zwischen einigen Unicode-Zeichen und den
Codepage-Zeichen. Es gibt jedoch auch viele (in einigen Fällen sehr
viele) Unicode-Zeichen, die einem der Codepage-Zeichen sehr ähnlich
sind, obwohl sie technisch gesehen nicht dasselbe sind. In solchen
Fällen zeigt UNI2ASCI das Zeichen trotzdem mit dem Codepage-Zeichen
an, dem es ähnlich ist, anstatt einfach ein "{U+####}" anzuzeigen.
Natürlich liegt die Ähnlichkeit im Auge des Betrachters, und Zeichen,
die manche Leute für "ähnlich" halten, sind es für andere vielleicht
nicht. Ich bin alle Unicode-Zeichen der Version 5.0 durchgegangen und
habe die Codepage-Zeichen der Codepage 437 (United States English)
gefunden, von denen ich persönlich glaube, daß sie ähnlich sind. Ich
habe viele, viele Tage gebraucht, um sie alle durchzugehen, so daß die
Dinge, die ich an einem Tag für ähnlich hielt, an einem anderen nicht
unbedingt übereinstimmen (je nachdem, wie ich mich gerade fühlte, wie
das Wetter war, wie die Beleuchtung im Raum war und wer weiß, was noch
alles).
Trotz der Ungereimtheiten denke ich, daß UNI2ASCI ein ziemlich guter
Anfang für ein "universelles" Unicode-zu-Codepage-Konvertierungspro-
gramm für DOS ist. Allerdings unterstützt UNI2ASCI derzeit nur UTF-16
LE (wie alle USB-bezogenen Zeichenketten kodiert sind) und dekodiert
nur in Codepage 437 (die Codepage, die ich verwende). Solange ich
nicht sehr viel Zeit habe (hah!), werde ich UNI2ASCI wahrscheinlich
nicht in nennenswerter Weise aktualisieren, wie z.B. andere UTF-Kodie-
rungen oder Codepages unterstützen.
Ich möchte jemanden, der daran interessiert ist, dazu ermutigen,
UNI2ASCI zu übernehmen und es zu aktualisieren, damit es alle möglichen
neuen Elemente enthält und auf alle möglichen Arten außer für USB ver-
wendet werden kann.
Um UNI2ASCI zu verwenden, müssen Sie einfach die Speicheradresse (hexa-
dezimales Segment:Offset-Format) angeben, an der sich der Unicode-
String (UTF-16 LE) befindet.
Die Zeichenkette muss mit dem Unicode-Zeichen 0 enden. Zum Beispiel:
UNI2ASCI 1234:5678
Das Programm USBSUPT1 (Seite 178 oben von USBINTRO.DOC) ruft UNI2ASCI
auf, um alle Unicode-Strings anzuzeigen, die von den USB-Geräten herun-
tergeladen werden.
Weitergehende Informationen finden Sie unter:
https://gitlab.com/FreeDOS/drivers/usbdos/-/tree/master/DOC/DOSUSB
ODER:
C:\FREEDOS\DOC\usbintro.doc (ist für edit zu groß, bitte ver-
wenden Sie ggfs. einen anderen Editor, z.B. Blocek!)
ODER:
https://bretjohnson.us/
Beispiel:
- vgl. obige Beispiele -
Siehe auch:
boundtst
drives
errorlevel/exitcodes
hidsupt1
inklevel
irq
ps2mtest
scantest
thrust
usbdevic
usbdos
usbdrive
usbhosts
usbhub
usbjstik
usbkeyb
usbmouse
usbprint
usbsupt1
usbuhci
usbuhcil
vendorid
Copyright © 2007-2009 Bret E. Johnson, Hilfeversion 2023
und 2025 von W. Spiegl.
Diese Datei ist abgeleitet vom FreeDOS Spezifikationen-HOWTO.
Vgl. auch die Datei H2Cpying bezüglich der Kopierbedingungen.