AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein UTF-8 codierte Zeichen im Quelltext verwenden und in Unicode decodieren
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Papaschlumpf73 · begonnen am 17. Mai 2023 · letzter Beitrag vom 19. Mai 2023
Antwort Antwort
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
317 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 17. Mai 2023, 11:06
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):

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:

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!
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

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

  Alt 17. Mai 2023, 12:48
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 17. Mai 2023, 14:38
¨ (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

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Mai 2023 um 14:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#4

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

  Alt 18. Mai 2023, 03:11
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
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
317 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 19. Mai 2023, 13:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 19. Mai 2023, 14:18
"Faul" ist aber die Ressource, über den RessoucenManager (im Menü Projekt) und Delphi-Referenz durchsuchenTResourceStream.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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