我正在尝试编写一个可以通过 python 2 和 3 运行的程序。它从网站读取字符并写入文件。我已经unicode_literals
从 __future__ 导入了。
直接尝试编写如下所示的字符串:
txt = u'his$\u2026\n'
会导致 UnicodeEncodeError:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 4: ordinal not in range(128)
在 python2 中将其写入文件的唯一方法是:
fp = open("/tmp/test", "w")
txt2 = txt.encode('utf-8')
fp.write(txt2) # It works
type(txt2) # str - that is why it works
但是,尝试在 python3 中重用相同的代码是行不通的,因为在 python 3 中,
type(txt2) # is byte type
例如
txt.encode('utf-8')
b'his$\xe2\x80\xa6\n'
强制 afp.write(txt2)
会抛出 TypeError:
TypeError: write() argument must be str, not bytes
因此,可以txt = u'his$\u2026\n'
在 python 2 和 3 中使用相同的代码块将其写入文件。(除了在 fp.write 上使用包装器)