Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Unicode Problem mit Lazarus/Fpc (https://www.delphipraxis.net/157723-unicode-problem-mit-lazarus-fpc.html)

cookie22 22. Jan 2011 11:17

Unicode Problem mit Lazarus/Fpc
 
Hallo,

gibt es für Lazarus sowas wie WideStrings.pas und WideStringUtils.pas aus Delphi?

Ich muss aus einer UTF-16 kodierten Datei Strings auslesen und diese dann per InsertMenuW dann in ein Menü einfügen. Leider bekomme ich im Menü nur Müll angezeigt und nicht meine chinesischen Zeichen. Jemand ne Idee?

Bernhard Geyer 22. Jan 2011 11:36

AW: Unicode Problem mit Lazarus/Fpc
 
Verwendet Lazarus/FPC nicht primär UTF-8?

himitsu 22. Jan 2011 11:38

AW: Unicode Problem mit Lazarus/Fpc
 
Darum möchte er ja das UTF-16 konvertieren :wink:

Irgendwie/-wo wird das bestimmt möglich sein. (kann mir nicht vorstellen, daß die sowas vergessen haben)

Bernhard Geyer 22. Jan 2011 12:54

AW: Unicode Problem mit Lazarus/Fpc
 
Die Frage ist erstmal: Wird die Textdati korrekt ausgelesen?

Dann schau mal ob du eine UTF8ToWideString-Funktion findest.

cookie22 22. Jan 2011 13:14

AW: Unicode Problem mit Lazarus/Fpc
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1076535)
Die Frage ist erstmal: Wird die Textdati korrekt ausgelesen?

Dann schau mal ob du eine UTF8ToWideString-Funktion findest.

Was bringt mir UTF8ToWideString, ich muss UTF-16 lesen und das selbe an die API Funktion weiter geben.

Mir ist nicht mal klar wie ich die Datei lesen soll ohne das ich Datenmüll bekomme.

JamesTKirk 22. Jan 2011 13:16

AW: Unicode Problem mit Lazarus/Fpc
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1076527)
Verwendet Lazarus/FPC nicht primär UTF-8?

Lazarus verwendet UTF-8.
Free Pascal verwendet das Ansi System Encoding (unter Deutschem Windows meist CP1242 und unter Linux meist UTF-8).

Zitat:

Zitat von cookie22 (Beitrag 1076526)
Hallo,

gibt es für Lazarus sowas wie WideStrings.pas und WideStringUtils.pas aus Delphi?

Ich muss aus einer UTF-16 kodierten Datei Strings auslesen und diese dann per InsertMenuW dann in ein Menü einfügen. Leider bekomme ich im Menü nur Müll angezeigt und nicht meine chinesischen Zeichen. Jemand ne Idee?

Wie liest du die Datei denn aus?

Wenn du am Ende auf jeden Fall einen WideString hast, dann machst du z. B. für ein MenuItem einfach folgendes:

Delphi-Quellcode:
  // alle GUI Elemente in Lazarus verwenden UTF-8, also einen WideString in
  // UTF-8 umkodieren
  item.Caption := UTF8Decode(MeinWideString);
  // für einen Ansi String funktioniert das übrigens ähnlich
  item.Caption := AnsiToUTF8(MeinAnsiString);
  // oder
  item.Caption := SysToUTF8(MeinAnsiString);
Nebenbei: Du könntest an Stelle von WideString auch UnicodeString verwenden (ab Free Pascal 2.4.0). Dieser hat im Gegensatz zu WideString eine Referenzzählung und Copy-On—Write Funktionalität analog zu AnsiString (aka String).

Gruß,
Sven

himitsu 22. Jan 2011 13:53

AW: Unicode Problem mit Lazarus/Fpc
 
Abgesehn von den Surrogate-Pairs entspricht kann man ganz einfach WideStringToUtf8 nutzen.

cookie22 22. Jan 2011 13:58

AW: Unicode Problem mit Lazarus/Fpc
 
Zitat:

Wie liest du die Datei denn aus?
Das ist hier die frage die ich mir stellen, bis jetzt irgendwie gar nicht.

Die Datei ist im Ini-Format, darum meine Frage nach WideStrings. Da hätt ich einfach mit LoadfromFile die Datei in eine WideString-Liste geladen und mir meine Strings rausgepickt. Gib es da nichts ähnliches?

himitsu 22. Jan 2011 14:02

AW: Unicode Problem mit Lazarus/Fpc
 
Du kannst es notfalls über einen Stream in einen WideString laden, dann nach Ansi oder UTF-8 umwandeln und zum Schluß in eine Stringliste.


Aber warum nutzt du denn nicht direkt die WinAPI (davon die Wide-Version nutzen), bzw. kennt FPC/Lazarus denn kein TIniFile, welches diese API nutzt?

cookie22 22. Jan 2011 14:06

AW: Unicode Problem mit Lazarus/Fpc
 
Die Ini-Datei ist im UTF-16 Format, darum gibt es mit TIniFile nur Datenmüll.

himitsu 22. Jan 2011 14:12

AW: Unicode Problem mit Lazarus/Fpc
 
Die WinAPI kommt mit Ansi und Unicode (UTF-16) klar.
Also kennst das TIniFile in Delphi, welches direkt diese API nutzt auch mit Unicode-INIs zurecht.

Falls es sich um Wine handelt, dann hat man dort Mist implementiert und wenn es sich um Windows handelt, dann nutzt Lazarus unter Windows keine WinAPI und braut sein eigenes Süppchen, was auch Mist ist, wenn man es richtig macht.

MSDN-Library durchsuchenGetPrivateProfileString

cookie22 22. Jan 2011 14:55

AW: Unicode Problem mit Lazarus/Fpc
 
Du meinst z.B.: GetPrivateProfileString und WritePrivateProfileString. Die benutzt Lazarus nicht.

edit: Mit GetPrivateProfileStringW geht es aber. :)

Danke.

JamesTKirk 22. Jan 2011 16:49

AW: Unicode Problem mit Lazarus/Fpc
 
Zitat:

Zitat von himitsu (Beitrag 1076556)
Die WinAPI kommt mit Ansi und Unicode (UTF-16) klar.
Also kennst das TIniFile in Delphi, welches direkt diese API nutzt auch mit Unicode-INIs zurecht.

Falls es sich um Wine handelt, dann hat man dort Mist implementiert und wenn es sich um Windows handelt, dann nutzt Lazarus unter Windows keine WinAPI und braut sein eigenes Süppchen, was auch Mist ist, wenn man es richtig macht.

MSDN-Library durchsuchenGetPrivateProfileString

Die Free Pascal Implementierung von TIniFile ist komplett plattformunabhängig programmiert (nicht mal IFDEFs sind vorhanden). Deswegen verbietet sich die Nutzung der Windows API schon mal.

Ich hab jetzt allerdings auch keinen besseren Vorschlag als von Hand die Windows API zu verwenden (oder sich inifiles.pp zu schnappen und auf UnicodeString umzustellen).

Gruß,
Sven

cookie22 22. Jan 2011 16:57

AW: Unicode Problem mit Lazarus/Fpc
 
Nee, ist doch alles ok. Funktioniert perfekt. :D

Es geht um eine 64Bit Dll unter Windows, also muss es nicht plattformunabhängig sein.


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