AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode Problem mit Lazarus/Fpc

Ein Thema von cookie22 · begonnen am 22. Jan 2011 · letzter Beitrag vom 22. Jan 2011
Antwort Antwort
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 13:16
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).

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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 13:53
Abgesehn von den Surrogate-Pairs entspricht kann man ganz einfach WideStringToUtf8 nutzen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 13:58
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?
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 14:02
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?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 14:06
Die Ini-Datei ist im UTF-16 Format, darum gibt es mit TIniFile nur Datenmüll.
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 14:12
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
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 14:55
Du meinst z.B.: GetPrivateProfileString und WritePrivateProfileString. Die benutzt Lazarus nicht.

edit: Mit GetPrivateProfileStringW geht es aber.

Danke.
Gruß
Cookie

Geändert von cookie22 (22. Jan 2011 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 16:49
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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Unicode Problem mit Lazarus/Fpc

  Alt 22. Jan 2011, 16:57
Nee, ist doch alles ok. Funktioniert perfekt.

Es geht um eine 64Bit Dll unter Windows, also muss es nicht plattformunabhängig sein.
Gruß
Cookie
  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 22:14 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