我从谷歌文档中提取数据,处理它,并将其写入文件(最终我将粘贴到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"))
最后一行有一个编码错误:
'ascii'编解码器不能解码字节0xa0在位置
12286:序数不在范围(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
也许我需要写一些东西,而不是一个文本文件?
尽可能只处理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')
如果用python3编写
>>> a = u'bats\u00E0'
>>> print a
batsà
>>> f = open("/tmp/test", "w")
>>> f.write(a)
>>> f.close()
>>> data = open("/tmp/test").read()
>>> data
'batsà'
如果用python2编写:
>>> a = u'bats\u00E0'
>>> f = open("/tmp/test", "w")
>>> f.write(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 4: ordinal not in range(128)
为了避免这个错误,你必须使用“utf-8”编解码器将其编码为字节,就像这样:
>>> f.write(a.encode("utf-8"))
>>> f.close()
并在读取时使用“utf-8”编解码器解码数据:
>>> data = open("/tmp/test").read()
>>> data.decode("utf-8")
u'bats\xe0'
另外,如果你试图对这个字符串执行print,它会自动解码使用“utf-8”编解码器,就像这样
>>> print a
batsà