我正在使用Python 3.4,将unicode字符串写入文件。 写完文件后,如果我打开并看到它,它就完全是一组不同的字符。
代码: -
# -*- coding: utf-8 -*-
with open('test.txt', 'w', encoding='utf-8') as f:
name = 'أبيض'
name.encode("utf-8")
f.write(name)
f.close()
f = open('test.txt','r')
for line in f.readlines():
print(line)
输出: -
أبيض
提前致谢
答案 0 :(得分:4)
您还需要指定读取时使用的编解码器:
f = open('test.txt','r', encoding='utf8')
for line in f.readlines():
print(line)
否则使用您的系统默认值;请参阅open()
function documentation:
encoding 是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认编码取决于平台(无论
locale.getpreferredencoding()
返回什么),但可以使用Python支持的任何编码。
根据您获得的输出判断,您的系统使用Windows Codepage 1252作为默认值:
>>> 'أبيض'.encode('utf8').decode('cp1252')
'أبيض'
通过在阅读时使用错误的编解码器,您创建了所谓的Mojibake。
请注意,写作示例中的name.encode('utf8')
行完全是多余的;忽略该调用的返回值,并且f.write(name)
调用负责实际编码。 f.close()
调用也完全是多余的,因为with
语句已经负责关闭文件。以下将产生正确的输出:
with open('test.txt', 'w', encoding='utf-8') as f:
name = 'أبيض'
f.write(name)
with open('test.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
print(line)