python unicode:写入文件时,以不同的格式写入
问题描述:
我正在使用Python 3.4编写一个unicode字符串到文件。 写完文件后,如果我打开并查看,它完全是一组不同的字符。python unicode:写入文件时,以不同的格式写入
CODE: -
# -*- 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)
OUTPUT: -
أبيض
在此先感谢
答
你需要指定的编解码器时阅读以及使用方法:
f = open('test.txt','r', encoding='utf8')
for line in f.readlines():
print(line)
否则使用您的系统默认值;看到open()
function documentation:
编码是用于解码或编码所述文件的编码的名称。这只能用于文本模式。默认编码依赖于平台(无论
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)
效果很好,谢谢,谢谢你的什么是实际发生的好的解释.. –
@remisharoon:什么马亭说一下以防万一你没有完全得到在你的代码中使用'name.encode(“utf-8”)'这个调用_doesn't_ modify'name':它创建一个包含'name'的utf-8编码版本的新的字节串对象,但是你不会把'name.encode(“utf-8”)'赋值给任何刚刚被删除的新字符串。 –