我对python函数os.path.isdir有问题
当我尝试使用它时,我得到了:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 36: ordinal not in range(128)
我已经在我的文件#!/usr/bin/env python # coding: utf-8的头中放置了编码"stamp“
我还使用了相当适当的字符串解码,可以获得utf-8符号(我通过QT QLineEdit加载它们-但这并不重要)。
tmp_filepath = u''
tmp_filepath = tmp_filepath.decode('utf-8')
tmp_filepath += QtGui.QFileDialog.getExistingDirectory(self,"Choose directory",self.directorypath,QtGui.QFileDialog.ShowDirsOnly)在我尝试使用os.path.isdir(tmp_filepath)时出现问题
我读到这可能是由糟糕的python版本(非utf-8)引起的,但我找不到有关这方面的其他信息。我在Linux Ubuntu 10.04上使用python 2.6.5。
发布于 2013-03-27 21:33:17
isdir希望将其参数转换为字节序列(str),因为底层文件系统使用字节序列作为文件名。如果您提供一个字符串(unicode),它必须以某种方式对其进行编码。
它使用与print命令相同的编码规则。尝试打印tmp_filepath,您可能会得到相同的异常。
要解决此问题,请(a)设置您的语言环境(例如,环境中的LANG=en_US.utf-8 )或(b)将tmp_filename.encode('utf-8')传递给isdir和mkdir。
我推荐(a)。
发布于 2013-03-27 21:25:06
Qt返回一个QString对象--您必须将其转换为Python unicode,并将其编码为utf-8:
tmp_filepath = unicode(tmp_filepath)
os.path.isdir(tmp_filepath.encode("utf-8"))另外,在今天继续编程之前,请先阅读http://www.joelonsoftware.com/articles/Unicode.html。
或者,如果您不必与Python中的其他文本变量进行互操作,则QString对象本身提供了.toUtf8方法:
os.path.isdir(tmp_filepath.toUtf8()) https://stackoverflow.com/questions/15659133
复制相似问题