我正在尝试使用os.listdir(path)中的数据填充TreeView。
一切正常,直到我读取了带有非utf字符的目录名。在我的情况下,0xf6不是utf8。
当我在Windows上运行时,os.listdir()中的字符集是Windows-1252或ANSI。
如何解决此问题以在TreeView中正确显示?
以下是我的一些代码:
def fill_tree(treeview, node):
if treeview.set(node, "type") != 'directory':
return
path = treeview.set(node, "fullpath")
# Delete the possibly 'dummy' node present.
treeview.delete(*treeview.get_children(node))
parent = treeview.parent(node)
for p in os.listdir(path):
ptype = None
p = os.path.join(path, p)
if os.path.isdir(p):
ptype = 'directory'
fname = os.path.split(p)[1].decode('cp1252').encode('utf8')
if ptype == 'directory':
oid = treeview.insert(node, 'end', text=fname, values=[p, ptype])
treeview.insert(oid, 0, text='dummy')
问候 戈兰
答案 0 :(得分:0)
UnicodeDecodeError
是由于该函数需要Unicode字符串时传递了字节字符串。 Python 2尝试将字节字符串隐式解码为Unicode。改用Unicode字符串。 os.listdir(unicode_path)
将返回Unicode字符串,例如os.listdir(u'.')
。