Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie lese ich aus einem String ASCII (Unicode) Werte? (https://www.delphipraxis.net/93205-wie-lese-ich-aus-einem-string-ascii-unicode-werte.html)

qb-tim 2. Jun 2007 09:16


Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Hi,

meine Frage kommt von diesem ( http://www.delphipraxis.net/internal...078&highlight= ) Beitrag. Meine Frage ist ganz einfach:

Zitat:

Zitat von qb-tim
Wie lese ich aus einem String die ASCII-Werte (Unicode) in Form von Integers aus?

z.Bsp: String := 'Z' => Integer := 090

xaromz 2. Jun 2007 09:23

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Hallo,

aus einem (Ansi-)String kannst Du erst einmal keine Unicode-Werte auslesen, die Zeichen sind nämlich (normalerweise) 8 Bit lang. Wenn Du den Ordinalwert eines Zeichens haben willst, nimmst Du die Funktion Delphi-Referenz durchsuchenOrd:
Delphi-Quellcode:
S := 'ZA';
I := Ord(S[1]); // I = 90;
I := Ord(S[2]); // I = 65;
Gruß
xaromz

qb-tim 2. Jun 2007 09:27

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Hmm... Ich habe aber eine Unicode Datei aus der ich die Daten auslese und ich will dann die Unicode ASCII Werte erhalten...

Muss ich da etwas anderes als Strings verwenden? (Ich benutzte nur Zeichen mit den Werten 100 bis 199)

3_of_8 2. Jun 2007 09:28

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Was ist denn ein Unicode-ASCII-Wert? :gruebel:

qb-tim 2. Jun 2007 09:33

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Meine Datei erstelle ich mit Hilfe eines kleines Tricks in Windows...

Um z.Bsp ein großes Z darzustellen kann ich ALT + 9 , 0 drücken und es erscheint im TestEditor ein großes Z.

Als ich meine Datei speichern wollte hat Windows mich gewarnt, dass ANSI nicht alle Zeichen im Text richtig speichern konnte also musste ich auf Unicode umschalten.

Zitat:

Unicode = Multibye-Zeichensatz, welcher versucht alle bekannten Zeichen darzustellen.

3_of_8 2. Jun 2007 09:45

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Ich weiß, was Unicode ist. Unicode ist ein Zeichensatz, der mehrere Bytes pro Zeichen verwendet.
Ich weiß aber auch, was ASCII ist: Ein 7-Bit-Zeichensatz, bei dem das 8. Bit immer 0 ist.

Ein Unicode-ASCII-Wert ist also ein Widerspruch in sich.

xaromz 2. Jun 2007 09:45

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Hallo,

erst mal: Unicode-ASCII gibt es nicht. Entweder oder (wobei die ersten 128 Zeichen von Unicode den ASCII-Zeichen entsprechen). Wenn Du nur Zeichenwerte bis einschließlich 255 verwendest, dann bist Du mit ANSI eigentlich auf der sicheren Seite, da 8 Bit = 256 Werte. Das Problem könnte sein, dass ANSI in diesem Zusammenhang ein etwas schwammiger Begriff ist. Wie ich gerade bemerkt habe, speichert der Windows-Editor solche Dateien tatsächlich etwas komisch, d. h. er verändert Zeichen. Es könnte also sein, dass Du tatsächlich auf Unicode umsteigen musst. Hierfür stellt Delphi den Typ WideString zur Verfügung, bei dem jedes Zeichen auf zwei Byte besteht.

Gruß
xaromz

qb-tim 2. Jun 2007 09:47

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Heißt das, dass ich jetzt einfach nur die Datei in WideStrings einlesen soll und von da aus weiterarbeiten muss?

xaromz 2. Jun 2007 09:50

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Hallo,

genau. Du musst aber darauf achten, dass die meisten Komponenten der VCL nicht mit WideStrings umgehen können. Z. B. kannst Du die Datei nicht mit einer TStringList einlesen, da diese nur AnsiStrings unterstützt.

Gruß
xaromz

3_of_8 2. Jun 2007 10:32

Re: Wie lese ich aus einem String ASCII (Unicode) Werte?
 
Mit nem FileStream und nem WideString als Puffer ist das natürlich kein Problem:

Delphi-Quellcode:
var str: WideString
    fs: TFileStream;
//...
setlength(str, fs.size shr 1);
fs.read(str[1], fs.size);
//...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz