Как проверить, существует ли путь, представленный QString с немецкими умляутами? - PullRequest
1 голос
/ 13 апреля 2010

я получаю QString, которая представляет каталог из QLineEdit. Теперь я хочу проверить, существует ли определенный файл в этом каталоге. Но если я попробую сделать это с os.path.exists и os.path.join, то у меня возникнут проблемы, когда в пути к каталогу появятся умлауты:

#the direcory coming from the user input in the QLineEdit
#i take this QString to the local 8-Bit encoding and then make
#a string from it
target_dir = str(lineEdit.text().toLocal8Bit())
#the file name that should be checked for
file_name = 'some-name.txt'
#this fails with a UnicodeDecodeError when a umlaut occurs in target_dir
os.path.exists(os.path.join(target_dir, file_name))

Как бы вы проверили, существует ли файл, когда вы можете столкнуться с немецкими умлаутами?

1 Ответ

1 голос
/ 14 апреля 2010

Я не нашел этого на моем Ubuntu box с файловой системой ext3. Итак, я полагаю, сначала убедитесь, что файловая система поддерживает имена файлов в юникоде, иначе я считаю, что поведение не определено?

>>> os.path.supports_unicode_filenames
True

Если это правда, вы должны быть в состоянии передавать строки юникода непосредственно в вызовы os.path:

>>> print u'\xf6'
ö
>>> target_dir = os.path.join(os.getcwd(), u'\xf6')
>>> print target_dir
C:\Python26\ö
>>> os.path.exists(os.path.join(target_dir, 'test.txt'))
True

Вам следует взглянуть на QString.toUtf8 и, возможно, передать возвращаемое значение через os.path.normpath, прежде чем передать его в os.path.join

Удачи!

нм, он отлично работает и на моем Ubuntu Box ...

>>> os.path.supports_unicode_filenames
False
>>> target_dir = os.path.join(os.getcwd(), u'\xf6')
>>> print target_dir
/home/clayg/ö
>>> os.path.exists(os.path.join(target_dir, 'test'))
True
...