Python 3 unicode编码错误

DoT*_*nes 0 python unicode glob python-3.x

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

\n\n
\n

UnicodeEncodeError: \'charmap\' 编解码器无法对位置 18 中的字符 \'\\xf8\' 进行编码:字符映射到 <未定义>

\n
\n\n

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

\n\n
filePath = r"C:\\Users\\J\xc3\xb8rgen\\Tables\\\\"\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有办法获得变量的\'r\'编码?

\n\n

编辑:

\n\n
import glob\n\ndi = r"C:\\Users\\J\xc3\xb8rgen\\Tables\\\\"\n\ndef main():\n    fileList = getAllFileURLsInDirectory(di)\n    print(fileList)\n\ndef getAllFileURLsInDirectory(directory):\n    return glob.glob(directory + \'*.xls*\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

pep*_*epr 5

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

# -*- coding: cp1252 -*-
Run Code Online (Sandbox Code Playgroud)

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

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

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

更新

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

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

print(ascii(fileList))
Run Code Online (Sandbox Code Playgroud)