gpt4 book ai didi

python - 在 python 中使用编解码器 utf-8 文件打开错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:02 25 4
gpt4 key购买 nike

我在 windows xp 和 python 2.6.4 上执行以下代码

但它显示 IOError。

如何打开名称为 utf-8 编解码器的文件。

>>> open( unicode('한글.txt', 'euc-kr').encode('utf-8') )

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
open( unicode('한글.txt', 'euc-kr').encode('utf-8') )
IOError: [Errno 22] invalid mode ('r') or filename: '\xed\x95\x9c\xea\xb8\x80.txt'

但是下面的代码能够正常运行。

>>> open( unicode('한글.txt', 'euc-kr') )
<open file u'\ud55c\uae00.txt', mode 'r' at 0x01DD63E0>

最佳答案

Windows 向 Python 公开的 C 运行时接口(interface)使用系统代码页对文件名进行编码。与 OS X 和现代 Linux 版本不同,在 Windows 上,系统代码页从不是 UTF-8。所以 UTF-8 字节字符串不会有任何好处。

您可以使用 .encode('mbcs') 将文件名编码为当前代码页,在您的情况下,这可能等同于 .encode('cp949')。为了使其与文件名为 UTF-8 的其他平台兼容,您可以查找 sys.getfilesystemencoding,它将为您提供 utf-8mbcs 在 Windows 上。

然而,虽然 cp949 适用于韩语字符,但它会破坏该代码页(EUC-KR 的扩展版本)的全部内容之外的任何内容。

所以另一种方法是将文件名保留为 Unicode。在 Windows 上,这将使用 Unicode-native 接口(interface)以内部使用的 UTF-16LE 编码将文件名传递给 Windows。 (有关此功能的更多信息,请参阅 PEP277。)

这通常也适用于其他平台:Linux 和 OS X 应该默默地为您将 Unicode 文件名编码为 UTF-8。这在旧的 Python 版本中可能会失败更多,但它是 Python 3 中处理文件名的默认方式(默认字符串类型已更改为 Unicode)。

在 Python 2 上使用 Unicode 文件名时要注意的陷阱是:

  • 如果 os.path.supports_unicode_filenames为 False,因为它将在 Windows 之外,返回文件名的函数(例如 os.listdir)将始终为您提供字节字符串。您必须使用 sys.getfilesystemencoding 检测并解码它们。

  • 如果您在 Linux/OS X 上有一个名称不是有效 UTF-8 字符串的文件,您将无法为其获取 Unicode 文件名(如果您尝试,会出现 UnicodeDecodeError)。有点极端情况,但它会导致恼人的无法访问文件。

顺便说一下,

open(unicode('한글.txt', 'euc-kr'))

您可能想在那里说 'cp949'(因为 Windows 韩文代码页与 EUC-KR 有细微差别)。或者,更一般地说,'mbcs',它为您提供系统代码页,它可能与您的控制台输入的代码页相同。无论如何,我不知道 PyShell,但通常情况下,如果上面的方法有效,那么你应该可以直接输入它:

open(u'한글')

关于python - 在 python 中使用编解码器 utf-8 文件打开错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com