Probleme mit de_DE@euro kodierten Dateinamen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Hallo,

ein Beispiel von
http://www.pygtk.org/pygtk2tutorial/sec ... tions.html

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

# example filesel.py

import pygtk
pygtk.require('2.0')
import gtk
#import locale
#locale.setlocale(locale.LC_ALL, '')

class FileSelectionExample:
    # Get the selected filename and print it to the console
    def file_ok_sel(self, w):
        print "%s" % self.filew.get_filename()

    def destroy(self, widget):
        gtk.main_quit()

    def __init__(self):
        # Create a new file selection widget
        self.filew = gtk.FileSelection("File selection")

        self.filew.connect("destroy", self.destroy)
        # Connect the ok_button to file_ok_sel method
        self.filew.ok_button.connect("clicked", self.file_ok_sel)

        # Connect the cancel_button to destroy the widget
        self.filew.cancel_button.connect("clicked", lambda w: self.filew.destroy())

        # Lets set the filename, as if this were a save dialog,
        # and we are giving a default filename
        self.filew.set_filename("/video/")

        self.filew.show()

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    FileSelectionExample()
    main()

Code: Alles auswählen

Gtk-Message: Der Dateiname »@Volle_Kanne_Service_t\344glich__« konnte nicht in UTF-8 umgewandelt werden
 (versuchen Sie, die Umgebungsvariable G_BROKEN_FILENAMES zu setzen): Ungültige Bytefolge in Konvertierungseingabe
Sieht Python die eingestellten locale nicht? Die Dateinamen sind nach ISO codiert, die Umgebung auch.
Wieso erwartet Python UTF-8?
Wenn Python nicht in der Lage ist, sich nach der Umgebung zu richten, kann ich global auf iso-8859-1 setzen, daß die Dateinamen korrekt erkannt werden?

Gruß P.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

PmanX hat geschrieben:Sieht Python die eingestellten locale nicht? Die Dateinamen sind nach ISO codiert, die Umgebung auch.
Wieso erwartet Python UTF-8?
Wenn Python nicht in der Lage ist, sich nach der Umgebung zu richten, kann ich global auf iso-8859-1 setzen, daß die Dateinamen korrekt erkannt werden?
Hallo PmanX!

GTK gibt in deinem Fall an Python einen UTF-8-codierten String zurück. Zumindest versucht es das. In deinem Fall, stimmt die Codierung des Dateinamens nicht mit der von GTK ermittelten Codierung überein und es scheitert. Die Meldungen kommen nicht von Python, sondern von GTK.

Vielleicht versuchst du es doch mit setzen der Umgebungsvariable.
http://www.gtk.org/api/2.6/glib/glib-running.html

mfg
Gerold
:-)

PS: Es ist keine schlechte Idee, pyGTK-Programme in UTF-8 zu schreiben und in diesem Fall mal iso-8859-1 aussen vor zu lassen. Einen guten Editor - vorausgesetz. So musst du nicht jedes mal von und nach UTF-8 umwandeln. (Das hat aber jetzt nichts mit deinem derzeitigen Problem zu tun.)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Hallo gerold,
gerold hat geschrieben:...
GTK gibt in deinem Fall an Python einen UTF-8-codierten String zurück. Zumindest versucht es das. In deinem Fall, stimmt die Codierung des Dateinamens nicht mit der von GTK ermittelten Codierung überein und es scheitert. Die Meldungen kommen nicht von Python, sondern von GTK. ...
Danke für Deine Hilfe! Ich hatte schon die Vermutung und werde es noch heute testen. G_FILENAME_ENCODING kannte ich nicht.
Werde ich in meiner Umgebung verewigen ;) Der Zeitpunkt für meine Umstellung nach Unicode ist noch nicht.

Gruß P.
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Das scheint die beste Lösung für mich. :idea:

Code: Alles auswählen

export G_FILENAME_ENCODING="@locale"
Das hätte ich erwartet.
GLib inspects a few of environment variables in addition to standard variables like LANG, PATH or HOME.
Die Fehlermeldung gab ja einen Hinweis auf G_BROKEN_FILENAMES. Ich hatte RiesenTomaten auf den Augen :oops:
Antworten