Frage

Ich bin nicht ganz Profi mit Codings, aber hier ist, was ich glaube (obwohl es falsch sein mag):

  1. ASCII ist eine 7-Bit-Codierung mit fester Länge mit den Zeichen, die Sie in ASCII-Diagrammen finden können.
  2. UTF8 ist eine 8-Bit-Codierung mit variabler Länge. Alle Zeichen können in UTF8 geschrieben werden.
  3. UCS-2 LE/BE sind 16-Bit-Codierungen mit fester Länge, die die meisten häufigsten Zeichen unterstützen.
  4. UTF-16 ist eine 16-Bit-Codierung mit variabler Länge. Alle Zeichen können in UTF16 geschrieben werden.

Sind diese vor allem richtig?

Nun für die Fragen:

  1. Machen Sie die Fenster "A" -Funktionen (wie SetWindowTextA) ASCII -Saiten aufnehmen? Oder "Multi-Byte-Zeichenfolgen" (weitere Fragen dazu unten)?
  2. Nehmen die Fenster "W" -Funktionen UTF-16-Saiten oder UCS-2-Saiten auf? Ich dachte, sie nehmen UCS-2 auf, aber die Namen verwirren mich.
  3. Im Widechartomultibyte, Microsoft verwendet das Wort "Wide-Character String", um UTF-16 zu bedeuten. Was wird dann in diesem Zusammenhang als "Multi-Byte-String" angesehen? UTF-8?
  4. Ist LPWSTR Eine "Breitcharakterkette"? Ich würde sagen, dass es ist, aber dann bedeutet das nicht, dass es UTF-16 ist? Und würde das nicht bedeuten, dass es verwendet werden könnte, um beispielsweise 4-Byte-Zeichen anzuzeigen? Wenn nicht, dann ... Zeigt 4-Byte-Zeichen unmöglich an? (Windows scheint keine APIs für diese zu haben.)
  5. Ist die Funktionalität von WideCharToMultiByte ein Superset von denen von wcstombs, Und arbeiten beide an derselben Saite? Oder funktioniert der eine, beispielsweise an UTF-16, während der andere auf UCS-2 funktioniert?
  6. Sind Dateipfade in UTF-16 oder UCS-2? Ich weiß fwprintf, Gibt es eine standardisierte Codierung?
  7. Was ist "Ansi" Coding? Ist das überhaupt ein korrekter Begriff? Und wie bezieht es sich auf ASCII?
  8. (Ich hatte mehr Fragen, aber das ist genug ... Ich habe einige von ihnen sowieso vergessen ...)

Dies sind viele Fragen, daher würden auch alle Links zu Erklärungen darüber, wie alle diese Verbindung herstellen (abgesehen vom Lesen des Unicode -Standards, die sowieso nicht bei der Windows -API helfen) sehr geschätzt werden.

Vielen Dank!

War es hilfreich?

Lösung

Sind diese vor allem richtig?

Ja, wenn Sie nicht die Existenz von Zeichen annehmen, die nicht in Unicode codiert sind (für die meisten praktischen Anwendungen ist diese Annahme in Ordnung).

Nehmen die Fenster "A" -Funktionen (wie SetWindowtexta) ASCII -Zeichenfolgen auf? Oder "Multi-Byte-Zeichenfolgen" (weitere Fragen dazu unten)?

Sie nehmen Byte -Saiten (dh Strings, deren Codeeinheit ein Byte ist, das immer ein Oktett unter Windows ist), das in der aktuellen "ANSI"/MBCS/Legacy -Codierung codiert ist. "Ansi" sind die historischen Begriffe für diese Codierungen, aber nicht korrekt. Für westliche Windows-Systeme ist diese Codierung normalerweise Windows-1252.

Nehmen die Fenster "W" -Funktionen UTF-16-Saiten oder UCS-2-Saiten auf? Ich dachte, sie nehmen UCS-2 auf, aber die Namen verwirren mich.

Seit Windows 2000 unterstützen die meisten UTF-16. Der Name "breit" und der Rest der Microsoft-Terminologie (z. B. "Unicode", was "UTF-16" oder "UCs" bedeutet) wurden ausgewählt, bevor der moderne Unicode-Standard die Terminologie einheitelte.

In Widechartomultibyte verwendet Microsoft das Wort "Wide-Character String", um UTF-16 zu bedeuten. Was wird dann in diesem Zusammenhang als "Multi-Byte-String" angesehen? UTF-8?

Jeder andere kodiert das WideCharToMultiByte Supports ist in diesem Zusammenhang eine "Multi-Byte-Codierung", einschließlich Windows-1251 und UTF-8.

Ist LPWSTR eine "Weitcharakterkennzeichen"? Ich würde sagen, dass es ist, aber dann bedeutet das nicht, dass es UTF-16 ist? Und würde das nicht bedeuten, dass es verwendet werden könnte, um beispielsweise 4-Byte-Zeichen anzuzeigen? Wenn nicht, dann ... Zeigt 4-Byte-Zeichen unmöglich an? (Windows scheint keine APIs für diese zu haben.)

LPWSTR ist ein Zeiger auf wchar_t Das ist immer eine 16-Bit-nicht signierte Ganzzahl unter Windows. Welche Zeichen angezeigt werden können, ist nicht mit der Codierung in Verbindung gebracht, solange diese Codierung alle Unicode -Zeichen codieren kann. Windows ist im Allgemeinen in der Lage, Nicht-BMP-Zeichen anzuzeigen, jedoch nicht überall (z. B. die Konsole kann nicht).

Ist die Funktionalität von Widechartomultibyte ein Superet von der von WCSTOMBs, und arbeiten beide an derselben Art von String? Oder funktioniert der eine, beispielsweise an UTF-16, während der andere auf UCS-2 funktioniert?

Ich weiß es nicht wirklich, aber ich glaube nicht, dass sie sich zu sehr unterscheiden. Ich nehme an, Sie versuchen nur, einen Nicht-BMP-Zeichen in UTF-8 umzuwandeln und zu schauen, ob das Ergebnis korrekt ist.

Sind Dateipfade in UTF-16 oder UCS-2? Ich weiß, dass Windows es als "undurchsichtiges Array von Zeichen" aus der Dokumentation von Microsoft behandelt, aber gemäß dem C -Standard für Funktionen wie FWPrintf gibt es eine standardisierte Codierung?

Dateipfade sind in der Tat undurchsichtige Arrays von UTF-16-Zeichen, was bedeutet, dass Windows beim Speichern oder Lesen von Dateinamen keine Übersetzung ausführt (wie Linux und im Gegensatz zu Mac OS X). Aber Windows hat immer noch sein seltsames, größtenteils definierter Fall, das unempfindlich ist, was viel Ärger verursacht, da Dateinamen, die äquivalent behandelt werden, nicht unbedingt gleich sind. Das bricht viele Invarianten; Zum Beispiel unter Linux ohne Störung anderer Threads, wenn Sie zwei Dateien erfolgreich erstellen A und a In einem Verzeichnis werden Sie zwei verschiedene Dateien erhalten, während Sie unter Windows nur eine Datei erhalten (und im Allgemeinen eine unvorhersehbare Anzahl von Dateien).

Was ist "Ansi" Coding? Ist das überhaupt ein korrekter Begriff? Und wie bezieht es sich auf ASCII?

ANSI ist die amerikanische Standardisierungsorganisation. Das Verwenden dieses Wortes bei der Verweise auf Codings ist eine Fehlbezeichnung, aber häufig, sollten Sie sich dessen bewusst sein. Ich bevorzuge den Begriff Legacy 8-Bit-Codierung, Weil ich denke, dass dies im Wesentlichen das ist: eine Nicht-Unicode-Codierung, die nur für die Kompatibilität mit Legacy (Windows 9x) -Anwendungen aufbewahrt wird. Auf westlichen Systemen ist dies normalerweise Windows-1252, ein ordnungsgemäßes Superset von ASCII.

Andere Tipps

  1. *Eine Funktion verwendete den aktiven ANSI -Codepage.

  2. *W Funktion Verwenden Sie UTF-16.

  3. Multi-byte bezieht sich auf das, was im Codepage-Parameter übergeben wird. Es ist am häufigsten entweder der aktive ANSI-Codepage oder UTF-8.

  4. LPWSTR ist eine UTF-16 Msdn)

  5. Ich weiß nichts über WCSTOMBs, ich benutze immer Widechartomultibyte.

  6. Dateipfade sind in UTF-16. Tatsächlich ist der gesamte Text intern in Windows UTF-16.

  7. Für die ANSI -Codierung müssen Sie dies ausführlich darüber nachlesen. Sie könnten schlechter machen, als zu beginnen mit Wikipedia und folgen Sie den Links von dort.

Ich hoffe, das hilft und wenn ich etwas falsches habe, jeder, der mehr weiß, bearbeiten Sie dies, um Fehler zu korrigieren!

Früher waren UCS-2. Von Windows 2000 sind breite Saiten UTF-16. Gut zu wissen, ob Sie ein altes Legacy -System aufrechterhalten müssen.

Zunächst finden Sie viele Informationen in Dieses Thema.

ASCII ist ein Zeichensatz, keine Codierung. Jetzt gibt es eine Reihe von 8-Bit-Zeichenzahlen, von denen eine im System als Standardeinstellung festgelegt wird (Sie können sie in regionalen Einstellungen ändern). *Eine Funktion akzeptieren 8-Bit-Zeichen in diesem Charset. UTF-8 ist kein Zeichen, sondern eine Codierung von Unicode-Charset. *W Funktionen, wie ich verstehe, UTF-16 anstelle von UCS-2.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top