强制性介绍,我已经做过一些研究
这似乎应该很简单(如果找到合适的目标问题,我很乐意作为重复对象关闭),但是我对字符编码以及Python如何处理它们自己不够熟悉。有可能看起来很懒惰,我会很好地指出答案可能在下面的链接之一中,但我尚未在阅读中看到它。
我已经引用了一些文档:Unicode HOWTO,codecs.py docs
我还研究了一些古老的,有投票权的SO问题:Writing Unicode text to a text file?,Python, Unicode, and the Windows console
问题
这是一个MCVE代码示例,演示了我的问题:
with open('foo.txt', 'wt') as outfile:
outfile.write('\u014d')
回溯如下:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\Users\cashamerica\AppData\Local\Programs\Python\Python3\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u014d' in position 0: character maps to <undefined>
我很困惑,因为代码点U+014D
是'ō',已分配的代码点LATIN SMALL LETTER O WITH MACRON
(official Unicode source)
我什至可以将字符打印到Windows控制台上(但是它呈现为普通的'o'):
>>> print('\u014d')
o
答案 0 :(得分:4)
您使用cp1252
作为默认编码,其中不包含ō
。
使用显式编码写入(并读取)文件:
with open('foo.txt', 'wt', encoding='utf8') as outfile:
outfile.write('\u014d')