Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.al. (https://www.delphipraxis.net/78699-jonglieren-mit-strings-widestrings-unicode-utf-8-et-al.html)

OldGrumpy 9. Okt 2006 16:49


Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.al.
 
Hallo zusammen,

ich grübel gerade über ein Problem nach, das sich bestimmt mal wieder supereinfach lösen lässt :)

Ich habe ein COM-Objekt, das mir einen Freitext in einem Puffer liefert der 512 Bytes gross ist und somit 256 Unicode-Zeichen (UTF-16, oder, da Windows, besser gesagt UCS-2) enthalten kann. Da drin steckt also ein nullterminierter Unicodestring.

Den in einen normalen String zu konvertieren ist nicht das Problem (das mache ich mit WideCharToString), nur habe ich dann in meinem normalen String ja durchaus auch Zeichen die mehr als ein Byte lang sind. Zumindest sagt die Delphi-Hilfe ja
Zitat:

"WideCharToString konvertiert den angegebenen nullterminierten Unicode-String in einen String mit Einzel- oder Multibyte-Zeichen."
Klingt für mich nach einer Konvertierung in UTF-8? Oder was steckt dann sonst im String? :gruebel:

Auf jeden Fall möchte ich nun ein paar "Müllzeichen" (es sind zum Beispiel Tabs drin enthalten die bei der Ausgabe stören) entfernen, jedoch müsste ich ja auf die Länge der einzelnen Zeichen acht geben, um wenn zum Beispiel asiatische Zeichen drinständen, die nicht gnadenlos zu verhackstücken. Wie mach ich das denn nun am elegantesten? Mein Code sollte halt nicht annehmen, dass nur ASCII im Feld steht.

Für jegliche Pointer, Tipps, Hinweise und Kommentare bin ich herzlich dankbar!

Edit: Tippfehler behoben

Ydobon 9. Okt 2006 17:35

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF8 et.al
 
WideCharToString konvertiert in die Codepage, die bei Windows eingestellt ist, bei hiesigen Rechnern also Einzelbyte. Für Zeichen, die nicht in die Codepage passen (z.B. asiatische Zeichen) liefert WideCharToString halt einfach die beliebten Fragezeichen.

OldGrumpy 9. Okt 2006 17:49

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Ah! Hmm, das macht die ganze Sache auf den ersten Blick richtig einfach :) Auf der andern Seite muss ich jetzt mal schauen was ich alles aufbohren muss, damit ich auch solche Zeichen korrekt anzeigen kann :) Herzlichen Dank auf jeden Fall schonmal für die Erläuterung zu WideCharToString, ich werd dann jetzt erstmal schauen, wie ich diese Zeichen weiterverarbeiten könnte. Immerhin muss dann ja auch die Komponente die alles anzeigt in der Lage sein, solche Zeichen anzuzeigen. Ich stelle immer wieder fest, dass das Ganze ein extrem ergiebiges Thema ist ;)

Ydobon 9. Okt 2006 17:53

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Dafür gibt es die üblichen Verdächtigen TntWare Delphi Unicode Controls.
Und wenn du sie verwendest, dann bleibe am besten auch bei Unicode anstelle mit den unterschiedlichen Codepages zu jonglieren.

OldGrumpy 9. Okt 2006 20:47

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Unicode war mir schon immer deutlich lieber als diese ominösen Codepages, bei denen nie alles so aussah wie es sollte ;) ;)
TNTware hatte ich zwar noch irgendwo im Hinterkopf aber auch schon halb wieder vergessen, nachdem ich vor geraumer Zeit schonmal deswegen rumge-google-t hatte :) Danke für den Tipp, werd ich mir nochmal anschauen. Heute hab ich erstmal mit dxgettext experimentiert, coole Sache das ganze. Allein das Pluralformenhandling ist ja wohl total abgefahren :D Leider passen aktueller Softwarestand und Handbuch nicht mehr hundertprozentig zusammen, aber mit etwas Experimentierfreude ging das schon. Ich werd mal weiterberichten wie das mit den Unicode Controls aussieht...

Bernhard Geyer 10. Okt 2006 06:17

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Unicode Controls ist die beste Lösung. Runhandieren mit Codepages/Charsets ist ne Frickellösung die nie 100%ig funktioniert und an allen möglichen Stellen klemmt.

Ich selbst habe eine große Anwendung mit Hilfe der Elpack-Controls schon seit 2002 auf Unicode umgestellt und habe mir viel Stress erspart.

OldGrumpy 11. Okt 2006 11:14

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Wie ist das denn überhaupt bei Systemen die auch Unicode-Dateipfade haben können? SysUtils und Co arbeiten ja alle nur mit dem Standard-Stringtyp. Gibts da Alternativen? Ich denke da besonders an Sachen wie japanische Dateinamen usw. - das könnte nen echtes Problem sein, oder sehe ich da was falsch? ExtractFileName(...) liefert mir dann ja einen runterkonvertieren String mit tollen Fragezeichen drin, oder? Zumindest könnte ich ohne ein japanisches System nix testen in der Richtung... :gruebel: :gruebel: :gruebel:

Bernhard Geyer 11. Okt 2006 12:49

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Zitat:

Zitat von OldGrumpy
Wie ist das denn überhaupt bei Systemen die auch Unicode-Dateipfade haben können? SysUtils und Co arbeiten ja alle nur mit dem Standard-Stringtyp. Gibts da Alternativen? Ich denke da besonders an Sachen wie japanische Dateinamen usw. - das könnte nen echtes Problem sein, oder sehe ich da was falsch? ExtractFileName(...) liefert mir dann ja einen runterkonvertieren String mit tollen Fragezeichen drin, oder? Zumindest könnte ich ohne ein japanisches System nix testen in der Richtung... :gruebel: :gruebel: :gruebel:

Die TNTWare-Controls habe auch für sowas eine Lösung....

OldGrumpy 11. Okt 2006 13:14

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Argh, die Sammlung ist ja viel umfangreicher als auf der Website aufgelistet :) Danke für den Tipp *g* Aber vollständig ist TntSysUtils nicht, IntToStr und Konsorten fehlen da...

Na mal schauen, danke auf jeden Fall!

Bernhard Geyer 11. Okt 2006 13:32

Re: Jonglieren mit Strings, Widestrings, Unicode, UTF-8 et.a
 
Zitat:

Zitat von OldGrumpy
Argh, die Sammlung ist ja viel umfangreicher als auf der Website aufgelistet :) Danke für den Tipp *g* Aber vollständig ist TntSysUtils nicht, IntToStr und Konsorten fehlen da...

Na mal schauen, danke auf jeden Fall!

Du kannst Dich ja beteiligen und deinen Beitrag leisten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 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