DoT*_*nes 0 python unicode glob python-3.x
我正在使用 glob.glob 从目录输入中获取文件列表。当尝试打开上述文件时,Python 用以下错误来反击我:
\n\n\n\n\nUnicodeEncodeError: \'charmap\' 编解码器无法对位置 18 中的字符 \'\\xf8\' 进行编码:字符映射到 <未定义>
\n
通过首先定义一个字符串变量,我可以这样做:
\n\nfilePath = r"C:\\Users\\J\xc3\xb8rgen\\Tables\\\\"\nRun Code Online (Sandbox Code Playgroud)\n\n有没有办法获得变量的\'r\'编码?
\n\n编辑:
\n\nimport 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*\')\nRun Code Online (Sandbox Code Playgroud)\n\n还有很多代码,但是这个问题停止了进程。
\n无论您使用原始字符串文字还是普通字符串文字,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)