【问题标题】:Python 3 unicode encode errorPython 3 unicode 编码错误
【发布时间】:2013-07-25 06:18:39
【问题描述】:

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

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

【问题讨论】:

  • no r 编码。您正在定义一个原始字符串文字,从而避免使用过多的反斜杠。您的文件编码处理了ø,因此您定义了一个 unicode 值。
  • "C:\\Users\\Jørgen\\Tables\\" 有效。您的编辑器将其保存为 UTF-8,这是 Python 在解释源代码时使用的默认编码。
  • 请向我们展示您产生该错误的代码。

标签: python unicode python-3.x glob


【解决方案1】:

另请参阅:

Convert python filenames to unicodeListing chinese filenames in directory with python

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

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

【讨论】:

    【解决方案2】:

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

    # -*- coding: cp1252 -*-
    

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

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

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

    更新

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

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

    print(ascii(fileList))
    

    【讨论】:

    • 我希望能够使用非 ASCII 字符,例如 æøå。目标是输入文件夹路径,并操作该文件夹中特定类型的每个文件。为了使它适用于其他用户,我不能保证该路径不会包含任何“非法”字符。我确实有 #-*- coding: utf-8 -*- 在上面,但那和你的“编码”建议都不起作用。
    • 好的。如果它不受您的控制,那很好。但是你必须保证无论如何没有非法字符。如果系统支持 Unicode 路径,即使是 Unicode 字母也可以。你使用 Python 3 还是 Python 2?
    • 好的。 # -*- coding: ... -*- 行是否有助于消除错误?
    • 当我在代码中定义di = r"C:\Users\Jørgen\Tables\\" 时,coding 行有效。但是当我尝试将文件夹路径作为输入时,一切又出错了。
    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多