我想确保我的代码中的所有字符串都是unicode,所以我使用unicode_literals,然后我需要将字符串写入文件:
from __future__ import unicode_literals
with open('/tmp/test','wb') as f:
f.write("中文") # UnicodeEncodeError
所以我需要这样做:
from __future__ import unicode_literals
with open('/tmp/test','wb') as f:
f.write("中文".encode("utf-8"))
f.write("中文".encode("utf-8"))
f.write("中文".encode("utf-8"))
f.write("中文".encode("utf-8"))
但每次我需要在代码中编码时,我都很懒,所以我改为编解码器:
from __future__ import unicode_literals
from codecs import open
import locale,codecs
lang,encoding = locale.getdefaultlocale()
with open('/tmp/test','wb',encoding) as f:
f.write("中文")
最佳答案
您不需要调用.encode(),也不需要显式调用locale.getdefaultlocale():
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import io
with io.open('/tmp/test','w') as file:
file.write(u"中文" * 4)
它使用locale.getpreferredencoding(False)字符编码将Unicode文本保存到文件中.
在Python 3上:
>您不需要使用显式编码声明(# – * – coding:utf-8 – * – ),在Python源代码中使用文字非ascii字符. utf-8是默认值.
>你不需要使用import io:builtin open()就是io.open()
>您不需要使用u”(u前缀). ”默认情况下,文字是Unicode.如果你想省略你”然后从__future__中恢复导入unicode_literals,就像问题中的代码一样.
即,完整的Python 3代码是:
#!/usr/bin/env python3
with open('/tmp/test','w') as file:
file.write("中文" * 4)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。