TreeView.insert引发UnicodeDecodeError

时间:2018-11-19 14:28:02

标签: windows python-2.7 utf-8 treeview

我正在尝试使用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')

问候 戈兰

1 个答案:

答案 0 :(得分:0)

UnicodeDecodeError是由于该函数需要Unicode字符串时传递了字节字符串。 Python 2尝试将字节字符串隐式解码为Unicode。改用Unicode字符串。 os.listdir(unicode_path)将返回Unicode字符串,例如os.listdir(u'.')