0

我正在使用 glob.glob 从目录输入中获取文件列表。当试图打开上述文件时,Python 用这个错误反击我:

UnicodeEncodeError:“charmap”编解码器无法在位置 18 编码字符“\xf8”:字符映射到 <未定义>

通过首先定义一个字符串变量,我可以这样做:

filePath = r"C:\Users\Jørgen\Tables\\"

有什么方法可以获取变量的“r”编码吗?

编辑:

import glob

di = r"C:\Users\Jørgen\Tables\\"

def main():
    fileList = getAllFileURLsInDirectory(di)
    print(fileList)

def getAllFileURLsInDirectory(directory):
    return glob.glob(directory + '*.xls*')

还有很多代码,但是这个问题会停止这个过程。

4

2 回答 2

4

无论您使用的是原始字符串文字还是普通字符串文字,Python 解释器都必须知道源代码编码。您似乎使用了一些 8 位编码,而不是 UTF-8。因此,您必须添加如下行

# -*- coding: cp1252 -*-

在文件的开头(或使用用于源文件的另一种编码)。它不必是第一行,但通常是第一行或第二行(第一行应包含#!python3在 Windows 上使用的脚本)。

无论如何,通常最好不要在文件/目录名称中使用非 ASCII 字符。

您还可以在路径中使用普通斜杠(与基于 Unix 的系统中的方式相同)。此外,当您需要组合路径时,请查看os.path.join 。

更新

问题可能不在您搜索的位置。我的猜测是,只有当您想通过显示结果列表时才会出现错误print。这通常是因为控制台默认使用无法显示字符的非 unicode 编码。在窗口中尝试chcp不带参数的命令。cmd

您可以修改main()函数中的打印命令,以将字符串表示形式转换为始终可以显示的 ASCII:

print(ascii(fileList))
于 2013-07-25T11:59:19.133 回答
0

另请参阅:

将 python 文件名转换为 unicode使用 python 在目录中列出中文文件名

您可以告诉 Python 将字符串显式处理为 unicode——但您必须从第一个字符串开始维护它。

在这种情况下,将 u'somepath' 传递给 os.walk。

于 2014-04-09T23:12:48.693 回答