AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dateinamen mit Umlauten

Ein Thema von eikeble · begonnen am 7. Nov 2009 · letzter Beitrag vom 9. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2   
eikeble

Registriert seit: 4. Feb 2004
14 Beiträge
 
Lazarus
 
#1

Dateinamen mit Umlauten

  Alt 7. Nov 2009, 11:33
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dateinamen mit Umlauten

  Alt 7. Nov 2009, 11:37
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
eikeble

Registriert seit: 4. Feb 2004
14 Beiträge
 
Lazarus
 
#3

Re: Dateinamen mit Umlauten

  Alt 7. Nov 2009, 12:03
Ja, ziemlich sicher. Die Konvertierung funktioniert auch einwandfrei. Daran liegt es also leider nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Dateinamen mit Umlauten

  Alt 7. Nov 2009, 13:18
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
eikeble

Registriert seit: 4. Feb 2004
14 Beiträge
 
Lazarus
 
#5

Re: Dateinamen mit Umlauten

  Alt 7. Nov 2009, 13:29
Das kann natürlich sein, hilft mir nur ledier nicht wirklich weiter
Gruß

Eike
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

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

Re: Dateinamen mit Umlauten

  Alt 8. Nov 2009, 12:18
Hi!

Ich weiß nicht was genau du machst, aber folgender Code funktioniert bei mir unter Win32 und Lazarus 0.9.28:

Delphi-Quellcode:
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;
Eine Datei namens "file-with-ü.txt" wird erfolgreich ausgelesen und in das Memo geschrieben.

Zitat von Bernhard Geyer:
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.
Ich glaub, dass da jeder eine andere Ansicht darüber hat, wer hier jetzt was falsch gemacht hat - und nein, ich möchte hier jetzt keine Diskussion darüber starten.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Dateinamen mit Umlauten

  Alt 8. Nov 2009, 12:31
Zitat von JamesTKirk:
Ich glaub, dass da jeder eine andere Ansicht darüber hat, wer hier jetzt was falsch gemacht hat
Egal ob man nun alle mit Unicode nach UTF16 (Delphi) nimmt oder nach UTF8 (Lazarus) sollte man auf jedenfall dafür sorgen das alle Methdoen das verwenden. Und dein obiges Beispiel zeit das hier Lazarus nicht konsequent ist. Wenn schon UTF8 dann überall. Delphi mit seiner Implementierung (seit D2) kann z.B über einen eigenen Wrapper für TOpendialog einen Widestring bekommen und diese dann der TFileStream.Create-Methode übergeben und die Compilermagic sorgt dafür das Sonderzeichne die in der aktuellen Codepage vorhanden sind auch korregt zur verfügung stehen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
eikeble

Registriert seit: 4. Feb 2004
14 Beiträge
 
Lazarus
 
#8

Re: Dateinamen mit Umlauten

  Alt 8. Nov 2009, 12:59
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
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

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

Re: Dateinamen mit Umlauten

  Alt 8. Nov 2009, 19:34
Zitat von Bernhard Geyer:
Zitat von JamesTKirk:
Ich glaub, dass da jeder eine andere Ansicht darüber hat, wer hier jetzt was falsch gemacht hat
Egal ob man nun alle mit Unicode nach UTF16 (Delphi) nimmt oder nach UTF8 (Lazarus) sollte man auf jedenfall dafür sorgen das alle Methdoen das verwenden. Und dein obiges Beispiel zeit das hier Lazarus nicht konsequent ist. Wenn schon UTF8 dann überall. Delphi mit seiner Implementierung (seit D2) kann z.B über einen eigenen Wrapper für TOpendialog einen Widestring bekommen und diese dann der TFileStream.Create-Methode übergeben und die Compilermagic sorgt dafür das Sonderzeichne die in der aktuellen Codepage vorhanden sind auch korregt zur verfügung stehen.
Das Problem dieser Inkonsistenz liegt an der zweigeteilten Natur von Lazarus und Free Pascal. Während Lazarus, um die Mehrsprachigkeit bis hin zu Russland, China und Co zu ermöglichen, bereits das komplette Interface auf UTF-8 umgestellt hat, wurde das in RTL und FCL von Free Pascal eben nicht gemacht (deswegen sind auch TFileStream und ExtractFileDir nicht UTF-8-fähig, während TPortableNetworkGraphic Teil der LCL und damit UTF-8-fähig ist). Es wird allerdings vom FPC Team daran gearbeitet dieses Manko mit einem Schwung Compilermagic zu beseitigen.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Dateinamen mit Umlauten

  Alt 9. Nov 2009, 07:05
Zitat von JamesTKirk:
Es wird allerdings vom FPC Team daran gearbeitet dieses Manko mit einem Schwung Compilermagic zu beseitigen.
Und was ist für den Fragesteller die anzustrebende Lösung so das sein Programm nicht mit einen der nächsten Update der RTL/FCL wieder nicht läuft? Oder sollte er nach jedem Update jede UTF8ToSys-Funktionsaufruf checken ob er noch nötig ist?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:09 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