QFileDialog 和路径中的德语变音符号
我正在做一个项目,使用Python和PyQT4开发。在这个过程中,我遇到了QFileDialog的一个奇怪问题,这个问题在我使用的IDE(Eclipse)中运行项目时并没有出现。
问题是,当我选择的文件路径中包含德语的变音字母(比如ä、ü、ö等)时,QFileDialog在“现有文件”模式下无法返回所选文件的列表。QFileDialog没有提供任何选项或参数来处理这种情况。有没有人知道该怎么解决这个问题?
补充说明:我遇到这个错误的部署场景是这样的。我使用Py2Exe构建一个可执行文件,然后用Inno Setup进行分发。我不知道这是否导致了问题,但我觉得提供更多信息总是好的。
补充说明2:我到周五之前无法访问确切的代码,但我们有一个if语句在等待对话框完成。像这样:
fileDialog = QFileDialog(...)
if fileDialog.exec_():
# get the choosen files
fileNames = fileDialog.getSelectedFiles()
# test if if-statement is entered
print fileNames
# convert from QStringList to normal list of Strings
fileNames = list(map(lambda x: str(x), fileNames))
# to suffice as an example print each
for fileName in fileNames:
print fileName
第一个打印命令会执行,而第二个不会。就好像中间有某个东西不愿意结束,而Python在某种程度上安静地处理了这个异常。不过,QFileDialog在选择文件并点击“打开”或双击文件后是按预期关闭的。
2 个回答
你应该使用unicode()(而不是str())来把QString转换成Python的unicode字符串。
试试用 lambda x: x.toUtf8(),或者 toLocal8Bit(),或者把 TextCodec 设置成你想要的编码,这样应该会有帮助。这些方法能返回正确编码的 Python 字符串。尽量不要对 QString 使用 str(),因为它不知道你想要的字符编码。
什么是 getSelectedFiles()?在 Qt 4.5 或更高版本的 QFileDialog 类中没有这个方法。我猜这可能是个打字错误或者是旧版 Qt 的东西,所以我在测试代码中把它改成了 selectedFiles()。
为什么不使用 QFileDialog 提供的方便方法来选择文件呢:
getExistingDirectory()
getOpenFileName()
getOpenFileNames()
getSaveFileName()
?