Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Probleme mit Unicode (https://www.delphipraxis.net/10121-probleme-mit-unicode.html)

himitsu 11. Okt 2003 21:52


Probleme mit Unicode
 
hi,

:wall: ich arbeite an einem kleinem mehrsprachigen Programm in dem ich mit Unicode (WideString) arbeite und hab da einige Probleme mit der Verarbeitung von WideString's.
Es scheint da irrgend wie nur Funktionen für ShortString [String] und AnsiString zu geben.
Und in einem 2-Byte-System alles 1-Byte-weise zu verarbeiten ist doch nicht das Wahre.

fehlende Funktionen:
- Copy
- Pos
- ReadLn, WriteLn (mit "TextFile" und "File of WideString" geht das nicht richtig)

Kann zwar mittlerweile Unicode-Text-Dateien (siehe Notepad [Windows-Editor]) auslesen, das geht allerdings etwas langsam, da die Datei im prinzip WideChar-weise ausgelesen wird und dann auf die verschiedenen Strings verteilt wird.

Und dann hab ich auch noch keine Funktion zum convertieren von WideString in AnsiString gefunden.
Da mir die Spezifikationen für die 2-Byte-Zeichen im AnsiString nicht bekannt sind kann ich auch keien eigene Funktion für die Umwandlung schreiben.


Zum Thema erweiterter Unicode (4 Byte) gibt es anscheinend überhaupt nichts. Brauche es zwar derzeit noch nicht, da es ja derzeit kaum/keine Programme gibt die das verwenden. Ist aber nur eine Frage der Zeit bis ich dort ankomme, da dort viele neue und im 2-Byte-Unicode-System noch fehlende asiatische Zeichen aufgeführt sind. Währe aber auch besser das jetzt im Aufbau schon einzubinden, als es später wieder ändern zu müssen.


Ich hoffe das mir jemand helfen kann, da die Meisten damit nichts zu tun haben. War vorher in einem anderen Forum unterwegs und da war in der Richtung nicht viel los.

Christian Seehase 12. Okt 2003 00:24

Re: Probleme mit Unicode
 
Moin Himitsu,

Zitat:

Zitat von himitsu
Und dann hab ich auch noch keine Funktion zum convertieren von WideString in AnsiString gefunden.

da bietet sich WideCharToString an. (Unit System).
Wenn Du Dir die mal in der Hilfe anschaust, kommst Du auch auf einen Verweis zu den weiteren Multibyte Funktionen (auch wenn's nicht viele sind.)

Was weitere Funktionen angeht, kann ich Dir empfehlen, Dir mal die Header Datei SHLWAPI.H aus dem PSDK anzusehen.
Dort sind viele Stringfunktionen enthalten. Ich weiss jetzt nur nicht aus dem Kopf, ob da auch Copy/Pos bzw. vergleichbares enthalten ist. Die Funktionen existieren i.d.R. als W(ide) und A(nsi) Version (zu importieren aus der SHLWAPI.DLL)

Das Einlesen geht vermutlich bequemer mit TFileStream oder per Hier im Forum suchenMMF (Memory Mapped File) allerdings musst Du dann wohl selber die Zeilen trennen.

himitsu 12. Okt 2003 02:03

Re: Probleme mit Unicode
 
:cat: Morsch'n Cris,

muß mich halt nach fast 1½ Jahren Pause erst wieder reinfinden und hab WideCharToString wohl bei der Suche übersehen.
Ist zwar wieder mal eine doppelte Konvertierung (WideString -> PWideChar -> AnsiString), kann mann aber noch verkraften.

Bei den anderen Funktionen sind mir aber noch keine für WideString untergekommen, nur ShortString, AnsiString und die entprechenden nullterminierten Zeigertypen. Werd' ab mal nach PWideChar... suchen, vieleicht findet sich ja doch noch was an. Und die SDK - oh mann schon wieder einen zu installieren.

Das mit den Streams fürs einlesen ist bei mir auf Grund der Art meiner Datenquellen zu umständlich. Hab die Streams wieder abgeschaft, da ich sie so oder so selbst trennen musste.

also Danke erstmal für den neuen Ansatz bei der Suche.

Bernhard Geyer 13. Okt 2003 07:52

Re: Probleme mit Unicode
 
Ein Teil der gesuchten Funktionen gibt es in Delphi schon:

Copy, Pos: Funktionieren auch mit Widestrings (UCS2)

ReadLn, WriteLn: Funktioniert nicht mit Widestrings.

Falls du wirklich ernsthaft mit Unicode arbeiten willst, so mußt Du noch entscheiden ob
du Win9x/ME auch unterstützen willst oder nur die NT-Schiene (NT/2000/XP/2003).

Für die NT-Schiene kannst Du die TNT-Controls verwenden hier sind auch Stringfunktionen für Widestrings vorhanden die teilweise auf API-Funktionen zurückgreifen

Für Win9x-2003 bleiben dir nur das El-Pack übrig. 100% Delphi und lauffähig auf jeder Win32-Version ohne auf Win32-API-Funktionen aufzusetzen.

4-Byte-Unicode (UCS4) wird m.E. frühestens in 5-10 Jahren überhaupt von einer Windows-Version unterstützt werden. Bis dorthin sind die Erweiterungen nur Theorie und ohne relevanz für die SW-Entwicklung. Auch im .NET-System basieren Strings nur auf 2-Byte-Characters (da ja auch die Win-API nur 2-Byte-Characters unterstützt).

In der Ausgabe 5.2003 der Zeitschrift "Der Entwickler" steht ein Artikel von mir über dieses Thema.

himitsu 14. Okt 2003 11:23

Re: Probleme mit Unicode
 
Die TNT-Controls seh'n nicht schlecht aus. Und wenn ich mich entscheiden muss, werd' ich wohl bei NT bleiben. (arbeite selbst mit 2000P)

Nach Möglichkeit versuche ich aber so zu arbeiten, das es unter 95 bis XP (demnächst natürlich auch Longhorn) läuft.
Auf der HomePage werden zusätzlich noch downloadbare Schriftarten eingebunden, so das man auch ohne die entsprechende Sprachunterstützung was erkennt.
Es ist schon richtig schwer etwas so zu schreiben, das es bei möglichst vielen läuft.

Und das mit UCS4 jetzt noch nicht so viel los ist, hatte ich mir schon gedacht.
Der Unicode Standard v4.0.0, mit dem die 4-Byte Unicodezeichen eingeführt wurden, ist glaube ich auch erst dieses Jahr offiziell rausgekommen.
Da aber die von Microsoft ja sonst alles einbauen, egal ob es richtig funktioniert oder nicht, hätte da also auch schon etwas vorhanden sein können.


:?: Gibt es noch 'ne Möglichkeit an diesen Artikel ran zu kommen. Werd' mich zwar mal etwas umschauen. Hab aber keine großen Hoffnungen.

Bernhard Geyer 14. Okt 2003 12:55

Re: Probleme mit Unicode
 
Zitat:

Die TNT-Controls seh'n nicht schlecht aus. Und wenn ich mich entscheiden muss, werd' ich wohl bei NT bleiben. (arbeite selbst mit 2000P)
Selbst verwende ich die ElPack-Komponenten aufgrund der "mehr-Features":
- Eigene XP-Themes-Engine (alle Controls sind XP-Themed)
- Win9x/ME-Support
- Enhanced-Controls verfügbar (schnelles Tree, Editoren, ...)
- ...

Zitat:

Es ist schon richtig schwer etwas so zu schreiben, das es bei möglichst vielen läuft.
Kann ich bestätigen. Vor allem wenn auch noch unter chinesichen, taiwanesischen, japanischen Windows laufen soll ...

Zitat:

Da aber die von Microsoft ja sonst alles einbauen, egal ob es richtig funktioniert oder nicht, hätte da also auch schon etwas vorhanden sein können.
Das wird wenn es irgendwann mal kommt nur noch auf der .NET-Schiene kommen. Und da müssen ja auch noch die Fonts nachgezogen werden ...

Zitat:

Gibt es noch 'ne Möglichkeit an diesen Artikel ran zu kommen. Werd' mich zwar mal etwas umschauen. Hab aber keine großen Hoffnungen.
Einfach beim Verlag nachbestellen: https://www.entwickler.com/ssl/mag_r...&ausgabeid=156

himitsu 14. Okt 2003 19:28

Re: Probleme mit Unicode
 
Oh hab's in der Eile wohl falsch verstanden.
Dachte "El-Pack" nur für 9x & ME aber nicht für NT. Da es nicht so ist, schau ich mir auch mal diese Pack an.


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