Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren (https://www.delphipraxis.net/213062-utf-8-codierte-zeichen-im-quelltext-verwenden-und-unicode-decodieren.html)

Papaschlumpf73 17. Mai 2023 11:06

UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren
 
In einer xsd-Datei habe ich die Pattern für TRegEx.Match, um alle Strings bzw. Eingaben zu überprüfen, ob alle Zeichen in einem bestimmten Zeichensatz enthalten sind. In UTF-8 sieht das etwa so aus (über 2000 Zeichen):

Delphi-Quellcode:
const A='( |'|[,-\.]|[A-Z]|[`-z]....';


Die Funktion zur Prüfung des Zeichensatzes brauche ich in mehreren Anwendungen und möchte die xsd nicht separat ausliefern oder als Ressource in jede Anwendung aufnehmen. Daher wollte ich das alles vereinfachen und die Pattern als const in die Funktion einbauen. In Unicode sieht das etwa so aus:

Delphi-Quellcode:
const B='( |''|[,-\.]|[A-Z]|[`-z]|~|¨|´|·...';


Das Dumme ist nur, das B nicht exakt mit dem aus dem xsd-Schema gelesenen Wert übereinstimmt, da der Delphi-Quelltexteditor wahrscheinlich nicht alle Zeichen 1:1 aufgenommen hat. Wahrscheinlich Sonderzeichen wie Zeilenwechsel, Tab usw.

Daher wollte ich mit const A arbeiten und diese UTF-8 codierten Zeichen erst in der Funktion in echte Unicode-Zeichen umwandeln. Das bekomme ich aber einfach nicht hin. Ich habe schon mit UTF8ToUnicodeString, UTF8Decode usw. herumgespielt. Es kommt aber immer wieder Variante A statt B dabei heraus.

Weiß jemand, wie ich die Zeichenfolge aus A (in der o.g. Form) in den Quelltexteditor bekomme und anschließend in die richtigen Unicode-Zeichen konvertiert bekomme? Wie gesagt, mit der xsd ist das kein Problem - es soll aber deutlich schlanker werden. Danke Euch!

mensch72 17. Mai 2023 12:48

AW: UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren
 
wandle dir den Inhalt deiner XSD via BASE64 in einfachen ASCII-Text... den kannst du simpel im Delphieditor als 'Base64-Text' einfügen und als "const" oder beliebige String Zuweisung nutzen :)

himitsu 17. Mai 2023 14:38

AW: UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren
 
¨ (nicht ") und · sind etwas Speziell.

Bei Allem was nicht ASCII ist (#0...#127), muß man etwas aufpassen.
In welcher Codierung wurde die PAS gespeichert?
UTF-8 mit BOM wäre angebracht.

Oder du codierrst im Text es entsprechend

Delphi-Quellcode:
const B='( |''|[,-\.]|[A-Z]|[`-z]|~|'#168'|´|'#183'...';

In unserer deutschen Codepage / Font liegen diese Zeichen im 8. Bit (bis #255).

Auch kommt es im Delphi darauf an, wie etwas interpretert wird, vor allem bezüglich ANSI und Unicode.
Delphi-Quellcode:
C := '·';
C := #183;
C := #$87;
C := #$0087; // ja, es sieht gleich aus, wie das davor, aber der Compiler interpretiert das eine als ANSI und das andere als Unicode.
// Das Eine wird also bei Übergabe an einen String/UnicodeString zur Laufzeit jedes Mal mit "aktueller" Codepage konvertiert und der andere Wert wird direkt reingeschrieben.
// Führende Nullen mögen mathematisch egal sein, aber logisch sind sie nicht immer irrelevant.

Besser wäre es diese Zeichen im höheren Unicoderaum zu suchen und jenen Code zu verwenden.
Im für deutsche Codepage geht es, aber z.B. in einem russischen oder chinesischen Windows (Codepage) sind an der Stelle andere Zeichen.

Außer es geht wirklich um den "ByteCode" und nicht um die optische Darstellung Repräsentation. (hier ist dann der richtig codierte Code besser, anstatt dem Zeichen)

Mavarik 18. Mai 2023 03:11

AW: UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1522531)
und möchte die xsd nicht separat ausliefern oder als Ressource in jede Anwendung aufnehmen.

Warum nicht?

Als Res und ggf. noch gepackt bist Du damit schneller fertig als hier den Post zu schreiben...

Wenn es es trotzdem im Source haben willst, konvertiere es als ASM.

Ich habe da früher immer inc-Dateien für genommen...

ASM
db 65,66,80,57,55,45,49,46
END;

Mavarik

Papaschlumpf73 19. Mai 2023 13:58

AW: UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren
 
Danke für eure Ideen. Am Ende hat die Faulheit gesiegt und ich habe die Base64-Variante eingebaut. Manchmal sieht man den Wald vor lauter Bäumen nicht.

himitsu 19. Mai 2023 14:18

AW: UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren
 
"Faul" ist aber die Ressource, über den RessoucenManager (im Menü Projekt) und Delphi-Referenz durchsuchenTResourceStream.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.

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