![]() |
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? |
AW: Unicode Problem mit Lazarus/Fpc
Verwendet Lazarus/FPC nicht primär UTF-8?
|
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) |
AW: Unicode Problem mit Lazarus/Fpc
Die Frage ist erstmal: Wird die Textdati korrekt ausgelesen?
Dann schau mal ob du eine UTF8ToWideString-Funktion findest. |
AW: Unicode Problem mit Lazarus/Fpc
Zitat:
Mir ist nicht mal klar wie ich die Datei lesen soll ohne das ich Datenmüll bekomme. |
AW: Unicode Problem mit Lazarus/Fpc
Zitat:
Free Pascal verwendet das Ansi System Encoding (unter Deutschem Windows meist CP1242 und unter Linux meist UTF-8). Zitat:
Wenn du am Ende auf jeden Fall einen WideString hast, dann machst du z. B. für ein MenuItem einfach folgendes:
Delphi-Quellcode:
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).
// 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); Gruß, Sven |
AW: Unicode Problem mit Lazarus/Fpc
Abgesehn von den Surrogate-Pairs entspricht kann man ganz einfach WideStringToUtf8 nutzen.
|
AW: Unicode Problem mit Lazarus/Fpc
Zitat:
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? |
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? |
AW: Unicode Problem mit Lazarus/Fpc
Die Ini-Datei ist im UTF-16 Format, darum gibt es mit TIniFile nur Datenmüll.
|
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. ![]() |
AW: Unicode Problem mit Lazarus/Fpc
Du meinst z.B.: GetPrivateProfileString und WritePrivateProfileString. Die benutzt Lazarus nicht.
edit: Mit GetPrivateProfileStringW geht es aber. :) Danke. |
AW: Unicode Problem mit Lazarus/Fpc
Zitat:
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 |
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