我花了很长时间来查明这个错误的一些具体原因。我正在编写一个简单的 XML RPC 服务器,它允许您进行目录列表和其他可能的只读操作。我已经做了一个简单的方法来列出所有文件夹和文件并将它们表示为字典:
def list_dir(self, dirname):
"""Returns list of files and directories as a dictionary, where key is name and values is either 'file' or 'dir'"""
dirname = os.path.abspath(os.path.join(self.server.cwd,dirname))
#Check that the path doesn't lead above
if dirname.find(self.server.cwd)==-1:
raise SecurityError("There was an attempt to browse in %s wthich is above the root working directory %s."%(dirname, self.server.cwd))
check_for_valid_directory(dirname)
#Looping through directory
files = [i for i in os.listdir(dirname)]
#Create associative array
result = {}
#Iterate through files
for f in files:
fullpath = os.path.join(dirname, f)
#Appending directories
if os.path.isdir(fullpath):
result[f] = "dir"
else:
result[f] = "file"
print "Sending data", result
return result
现在,当目录包含命名Nová složka
的文件(或更确切地说是文件夹)时,客户端会收到错误而不是所需的列表。当我删除有问题的文件名时,我收到了没有错误的数据。我不认为 Python 库有这个权利 - 参数转换应该是完整的,包括任何 unicode 的东西,或者根本不存在。
但无论如何,我应该如何编码 Python 库无法处理的数据?