如何将Unicode文本写入文本文件?
我正在从一个Google文档中提取数据,处理这些数据,然后写入一个文件(最终我会把这个文件的内容粘贴到Wordpress页面上)。
里面有一些非ASCII符号。我该如何安全地把这些符号转换成可以在HTML源代码中使用的符号呢?
目前,我在提取数据时把所有内容都转换成Unicode,然后把它们放在一个Python字符串里,接着执行:
import codecs
f = codecs.open('out.txt', mode="w", encoding="iso-8859-1")
f.write(all_html.encode("iso-8859-1", "replace"))
但是在最后一行出现了编码错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 12286: ordinal not in range(128)
部分解决方案:
这个Python代码运行没有错误:
row = [unicode(x.strip()) if x is not None else u'' for x in row]
all_html = row[0] + "<br/>" + row[1]
f = open('out.txt', 'w')
f.write(all_html.encode("utf-8"))
但是当我打开实际的文本文件时,看到里面有很多这样的符号:
Qur’an
也许我需要写入其他格式的文件,而不是文本文件?
8 个回答
82
在Python 3中,处理Unicode字符串的方式已经标准化了。
- 字符在内存中已经以Unicode(32位)格式存储。
你只需要以utf-8格式打开文件就可以了。
(从内存到文件的转换,会自动把32位的Unicode转换成可变字节长度的utf-8格式。)out1 = "(嘉南大圳 ㄐㄧㄚ ㄋㄢˊ ㄉㄚˋ ㄗㄨㄣˋ )" fobj = open("t1.txt", "w", encoding="utf-8") fobj.write(out1) fobj.close()
343
尽量只使用unicode对象,也就是说,当你第一次获取数据时,就把它解码成unicode对象;在需要输出的时候再编码成其他格式。
如果你的字符串实际上是一个unicode对象,那么在写入文件之前,你需要把它转换成一个unicode编码的字符串对象:
foo = u'Δ, Й, ק, م, ๗, あ, 叶, 葉, and 말.'
f = open('test', 'w')
f.write(foo.encode('utf8'))
f.close()
当你再次读取这个文件时,你会得到一个unicode编码的字符串,然后你可以把它解码成unicode对象:
f = file('test', 'r')
print f.read().decode('utf8')