发布于2019-12-24 04:19 阅读(1632) 评论(0) 点赞(27) 收藏(0)
我在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运行时接口使用系统代码页来编码文件名。与OS X和现代Linux版本不同,在Windows上,系统代码页绝不会是UTF-8。因此,UTF-8字节字符串将毫无用处。
您可以使用将该文件名编码为当前代码页.encode('mbcs')
,在您的情况下,该文件名可能等效于.encode('cp949')
。为了使其与其他文件名为UTF-8的平台兼容,您可以查找sys.getfilesystemencoding
,它将在Windows utf-8
或mbcs
Windows上为您提供。
但是,虽然cp949
可以使用韩文字符,但会破坏该代码页(EUC-KR的扩展版本)范围以外的所有内容。
因此,另一种方法是将文件名保留为Unicode。在Windows上,它将使用Unicode本机接口将文件名以内部使用的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'한글')
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/182967/ed73a1bf093933a3bb18/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!