Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Escape Sequenz nach Unicode (https://www.delphipraxis.net/165769-escape-sequenz-nach-unicode.html)

SittingDuck 15. Jan 2012 19:23

Escape Sequenz nach Unicode
 
Hallo zusammen.

Ich habe eine Textdatei voll mit Unicode Escape-Sequenzen die alle z.B. so ausehen: 'U+1F618', 'U+1F604' ...
Nun möchte ich diese als Unicode-Zeichen in eine Variable einlesen. Das Ergebnis sollte dann dasselbe sein wie:
Code:
var s: string;

s := UTF8.Encode(#$01F618);
Ist warscheinlich ganz einfach, aber ich komme nicht dauf ...
Besten Dank ...

BUG 15. Jan 2012 21:57

AW: Escape Sequenz nach Unicode
 
Scanne mit einen 7-Zeichen großen Fenster über den String. Immer wenn das Muster im Fenster erscheint, schmeißt du den Inhalt weg und gibst das passendende Zeichen im Ausgabestring aus.

Könnte funktionieren :mrgreen:

himitsu 15. Jan 2012 22:07

AW: Escape Sequenz nach Unicode
 
UTF8Decode kennt keine Surrogates, also kannst du damit keine Zeichen über #$FFFF dekodieren.





Ach ja, wie wäre es, wenn du dir die Parameter und Rückgabewerte ansiehst?
Der Rückgabewert paßt also nicht zur Variable.
Delphi ab 2009 (also auch dein 2010) wandelt hier das UTF8 wieder zurück in Unicode.

UTF8.Encode liefert UFT8 zurück und kein Unicode (UTF8String und nicht String/UnicodeString).

Also abgesehn davon, daß dieser Unicode-Bereich nicht umgewandelt werden kann, dann wäre, selbst wenn es ginge, alles umsonst.
Unicode > UTF8 > Unicode :zwinker:

BUG 15. Jan 2012 22:20

AW: Escape Sequenz nach Unicode
 
Naja, wenn man alle Zeichen als UTF-16 Zeichen ausgegibt, kann man dann den kompletten Ausgabestring in das konvertieren lassen, was man braucht.

SittingDuck 15. Jan 2012 22:27

AW: Escape Sequenz nach Unicode
 
Hmm ... komisch
Code:
s := UTF8.Encode(#$01F618);
funktioniert ja und packt mir das richtige Unicode Zeichen in die Variable, auch wenn der Compiler etwas meckert. Aber so kann ich ja nicht mit den Strings aus der Textdatei arbeiten. Was ich bräuchte wäre sowas:
Code:
var s: string;

s := '$01F618';
s := UTF8.Encode(Chr(s));
aber das ist nicht dasselbe wie oben.

Sir Rufo 15. Jan 2012 22:32

AW: Escape Sequenz nach Unicode
 
Das geht mit
Delphi-Quellcode:
StrToInt( '$01F618' );

SittingDuck 15. Jan 2012 22:44

AW: Escape Sequenz nach Unicode
 
Aber das geht ja in meinem Beispiel nur bis $FFFF

Code:
UTF8.Encode(Chr(StrToInt('$01F618')));
Also ich habe einen UTF8 codierten String, da steckt ein Symbol drin was der Sequenz U+1F618 entspricht. Wie finde ich das z.B. mit der Pos Funktion?

Sir Rufo 15. Jan 2012 22:53

AW: Escape Sequenz nach Unicode
 
Irgendwie verstehe ich jetzt nur noch Bahnhofskantine :gruebel:

Wieso geht da was nur bis $FFFF?

Was willst du jetzt auf einmal mit Pos?
Eben wolltest du noch etwas umwandeln, jetzt was mit Pos suchen?

SittingDuck 15. Jan 2012 23:06

AW: Escape Sequenz nach Unicode
 
Sorry, das war etwas unglücklich formuliert.
Also um bei der Eingangsfrage zu bleiben ...
Meine Textdatei hat folgende Zeilen:

U+1F618
U+1F604
...

Nach meinem Kenntnisstand sind das Codepoints welche ein Unicodezeichen representieren. Auf Basis dieser Zeilen, würde ich gerne einen String zusammenbauen, welche diese Unicodezeichen enthält. Einen Teilerfolg habe ich mit dieser Zeile erreicht, aber weiter komme ich nicht.
Code:
s := UTF8.Encode(#$01F618);
Diese Zeile benutzt direkt diese Hexzahlen und nimmt sie leider nicht aus der Textdatei.
Es tut mit Leid, wenn das etwas 'schwammig' formulert ist, aber ich bin im Unicode-Thema alles andere als Sattelfest.

himitsu 15. Jan 2012 23:13

AW: Escape Sequenz nach Unicode
 
Zitat:

Wieso geht da was nur bis $FFFF?
UTF-16 (UnicodeString/WideString) => 2 Byte pro Zeichen => 16 Bit pro Zeichen => 2^16 = 65536 Werte pro Zeichen => 65535 = $FFFF

Und das darüber ($010000 bis $1FFFFF) wird mit den Surrogates dargestellt.
Also, in UFT8Decode und Co. sind die Surrogates nicht implementiert und ansonsten ist es auch garantiert nicht möglich diese über eine billige (direkte) 1zu1-Ordinal>Character-Umrechnung hinzubekommen, denn Surrogate-Pairs sind 2 Zeichen und nicht nur 1 Zeichen.



Ach ja, nur nochmal zum Nachdenken:
Was macht Delphi-Referenz durchsuchenChr?
einen Ordinalwert in ein Zeichen umwandeln.
Und ist ein String ein ordinaler Wert?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Seite 1 von 2  1 2      

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