Frage

Ja wir reden über ASCII-Codes. Meine Entschuldigungen Ich bin nicht der Delphi Entwickler hier.

War es hilfreich?

Lösung

Für Delphi 7, würde ich bekommen die freie Unicode-Bibliothek von Mike Lischke , wer der Autor von Virtual Treeview ist.

Die libary enthält viele Konvertierungsfunktionen zu gehen und von Unicode, so dass man diejenigen verwenden kann, die am meisten Sinn in Ihrer Anwendung zu machen.

Oder Sie können auf Delphi 2009 aktualisieren , die verfügt über eine integrierte in Codierung Routinen und eine eigene Bibliothek von Konvertierungsfunktionen.

Andere Tipps

Lassen Sie sich gerade ein paar Dinge bekommen. Zeichensatz (Zeichensatz) und Zeichencodierungen sind zwei verwandte, aber unterschiedliche Konzepte. Ein Zeichensatz ist eine abstrakte Liste von Zeichen mit irgendeiner Art von ganzzahligen Zeichencode zugeordnet ist. Dann gibt es Zeichenkodierungen, das ist im Grunde ein Algorithmus, der beschreibt, wie die Zeichen in Bytes dargestellt werden.

ASCII fungiert sowohl als Zeichensatz und Codierung. Es verwendet 7 Bits 128 Zeichen (94 druckbar) auszudrücken. Unicode zum anderen ist ein Zeichensatz, mit dem Ausdruck 1,114,112 Codepunkte. Es gibt mehrere Kodierungen Unicode-Strings zu repräsentieren, aber bemerkenswertesten sind UTF-8, UTF-16, UTF-16LE und UTF-32. Mit anderen Worten kann ein einzelnes Unicode-Zeichen auf verschiedene Weise dargestellt werden, abhängig von den Kodierungen.

  

Wie kann ich konvertieren Unicode-Zeichen in ASCII-Codes in delphi 7?

Ich denke, die Frage auf zwei Arten interpretiert werden könnte.

  1. Ich habe eine Unicode-Zeichenfolge in einiger Codierung, die ASCII enthält nur druckbare Zeichen. Wie kann ich den String in einen Byte-Array von ASCII-Kodierung konvertieren?

  2. Ich habe einen Unicode-String in irgendeiner Codierung, die auch nicht-druckbare ASCII-Zeichen wie chinesische Schriftzeichen enthält. Wie kann ich die Zeichenfolge in eine ASCII-Kodierung kodieren, ohne Informationen zu verlieren, und es später auf den ursprünglichen Unicode-String dekodieren zurück?

Wenn Sie die erste bedeuten, können Sie die Unicode-String in Wide laden wie Osman sagt, und tun

var
  original: WideString;
  s: AnsiString;
begin
  s := AnsiString(original);

Wenn Sie die zweite bedeuten, müssen Sie einen allgemeinen Verschlüsselungsalgorithmus wie Base64 Codierung. Sie können DCPBase64.pas enthalten in David Barton DCPcrypt v2 Beta 3 .

Es hängt davon ab, was Ihre Definition der Umwandlung ist. Wenn Sie die 127 niedrigsten Zeichen in den Unicode-Äquivalent zuordnen möchten, können Sie eine explizite Umwandlung verwenden. Aber das schafft Müll, wenn die Zeichenfolge höhere Zeichen enthält.

Wenn Sie Zuordnungen wie ë wollen -> e und û -> u, können Sie Ihren eigenen Code schreiben. Aber beachten Sie, dass es immer Zeichen sind, die nicht konvertiert werden können.

„ASCII“ ist der Name einer bestimmten Zuordnung von Zeichen zu Zahlen, aber einige Leute sagen, „ASCII-Code“, wenn sie wirklich ASCII bedeuten überhaupt nicht; sie wollen einfach nur den numerischen Wert eines Zeichens, was Mapping in der Tat an der Zeit ist. Ist diese Beschreibung auf Sie zutrifft?

Wenn ja, dann können Sie die Ord Standardfunktion verwenden, um den Unicode-Codepunktwert, was auch immer Unicode-Zeichen, das Sie haben zu erhalten.

var
  wc: WideChar;
  ws: WideString;
  x: Word;

x := Ord(wc);
x := Ord(ws[1]);

Wenn Sie wirklich ASCII gemeint, aber dann werden Sie präziser sein müssen, welche Art von Umwandlung Sie im Sinn haben.

Als Beispiel der Buchstabe A in Unicode als U + 0041 und in ansi dargestellt als nur 41. Damit Umwandlung ziemlich einfach wäre, aber Sie müssen herausfinden, wie das Unicode-Zeichen codiert wird. Die häufigsten sind UTF-16 und UTF-8. 16 UTF, sind im Grunde genommen zwei Bytes pro Zeichen, aber auch das ist eine zu starke Vereinfachung, als ein Zeichen kann mehr Bytes aufweist. UTF-8 klingt, als ob es bedeutet, 1 Byte pro Zeichen kann aber sein, 2 oder 3. Um die Sache noch komplizierter zu machen, UTF-16 Little Endian oder Big-Endian sein. (U + 0041 oder 4100 U +).

Wenn Sie Ihre Frage macht keinen Sinn, wenn Sie zum Beispiel wandelt den arabischen Buchstaben ain U + 0639 auf ansi auf einem englischen locale will. Sie können nicht.

Fragen Siehe auf dem von Unicode in ASCII konvertieren:

Im allgemeinen Zeichensatz von Hunderten Tausende Einträgen kann nicht ohne Verlust von Informationen oder Codierungsschema in dem Zeichensatz von 127 Einträgen umgewandelt werden.

Sie können die Funktion in http://swissdelphicenter.ch/en/showcode .php? id = 1692
Er wandelt Unicode-String zu Ansi String angegebenen Codepage verwenden.
Wenn Sie Standard-System-Codepage verwenden möchten konvertieren (definiert in regionalen Optionen als Nicht-Unicode-Codepage) Sie können es einfach wie folgt vor:

var
  ws: widestring;
  s: string;
begin
  s:=string(ws)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top