![]() |
Dateinamen mit Umlauten
Hallo zusammen,
ich habe bei lazarus unter Windows das Problem, dass ich keine Dateien öffnen kann, die Umlaute enthalten. Ich habe versucht die UTF8 strings die mir eine OpenDialog liefert per UTF8ToSys in AnsiStrings umzuwandeln. Dies funktioniert auch, ich bekommen wenigstens keinen Fehler mehr. Beim auslesen der Datei aber bekomme ich nur einen leeren String. Zuerst trat das Problem bei der ReadXMLFile Funktion auf aber auch ein Versuch mit TFileStream löst das Problem nicht. Gibt es vieleicht irgend einen Trick? Lazarus: 0.9.28.2Beta FPC: 2.2.4 Widgetset: Win32 Vielen Dank schon mal. Gruß Eike |
Re: Dateinamen mit Umlauten
Sicher daß der OpenDialog einen UTF-8-String liefert?
In Delphi macht er es nicht und dort wird ebenfalls bei Utf8ToAnsi ein Leerstring geliefert, wenn der UTF-8-String defekt ist, bzw falls er nicht der UTF-8-Codierung entspricht. |
Re: Dateinamen mit Umlauten
Ja, ziemlich sicher. Die Konvertierung funktioniert auch einwandfrei. Daran liegt es also leider nicht.
|
Re: Dateinamen mit Umlauten
Kann es evtl. ein Bug in Lazarus sein der darauf begründet ist das man die besch*** Entscheidung getroffen hat den Unicode-Datentyp intern als UTF8 zu realisieren? Ich hatte auch mal eine OpenOffice-Beta-Version im test welche auch keine Dateien mit Umlauten lesen konnte.
|
Re: Dateinamen mit Umlauten
Das kann natürlich sein, hilft mir nur ledier nicht wirklich weiter ;-)
Gruß Eike |
Re: Dateinamen mit Umlauten
Hi!
Ich weiß nicht was genau du machst, aber folgender Code funktioniert bei mir unter Win32 und Lazarus 0.9.28:
Delphi-Quellcode:
Eine Datei namens "file-with-ü.txt" wird erfolgreich ausgelesen und in das Memo geschrieben.
var
s: String; fs: TFileStream; begin if OpenDialog1.Execute then begin Memo1.Lines.Clear; s := UTF8ToSys(OpenDialog1.FileName); fs := TFileStream.Create(s, fmOpenRead); try Memo1.Lines.LoadFromStream(fs); finally fs.Free; end; end; end; Zitat:
Gruß, Sven |
Re: Dateinamen mit Umlauten
Zitat:
|
Re: Dateinamen mit Umlauten
Vielen Dank für die Hilfe. Habe den Fehler jetzt gefunden. Selten dämlich, wenn die Datei, die man öffnet keine Daten enthält. Dann kann das ja auch nicht funktionieren ;)
Edit: Was wirklich nicht sehr konsequent ist, dass bei einigen Funktionen (z.B.: TPortableNetworkGraphic.SaveToFile() ) die konvertierung schon implementiert ist und somit bei einer doppelten konvertierung ein leerer String entsteht. Meiner Meinung nach entweder immer die konvertierung dem Programierer überlassen oder halt überall schon übernehmen. Edit2: Noch inkonsequenter ist, dass einige funktionen (ExtratcFileDir() ) Ansistrings und keine UTF8 Strings zurückliefern. Diese müssen also auch wieder nicht konvertiert werden. Gruß Eike |
Re: Dateinamen mit Umlauten
Zitat:
Gruß, Sven |
Re: Dateinamen mit Umlauten
Zitat:
|
Re: Dateinamen mit Umlauten
Zitat:
Gruß, Sven |
Re: Dateinamen mit Umlauten
Zitat:
Seit D2009 gibt es da Funktionen wir AnsiUpperCase, welche aber Unicode sind ... nur damit man als Programmierer es bei der Umstelltung leichter hat, aber wenn man etwas neu erstellt, dann ist das Chaos groß. :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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