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.