强制性的介绍注意到我做了一些研究
这看起来应该很简单(如果找到合适的目标问题,我很乐意以副本的形式结束),但我对字符编码和Python如何处理字符编码来自己进行suss还不够熟悉。冒着看起来懒洋洋的风险,我会很好地注意到答案可能在下面的某个链接中,但我还没有在阅读中看到它。
我引用了一些文档:Unicode HOWTOcodecs.py docs
我也看了一些投票率很高的老问题: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 MACRONofficial Unicode source
我甚至可以将字符打印到Windows控制台(但它呈现为一个普通的“o”):
>>> print('\u014d')
o

最佳答案

您正在使用cp1252作为默认编码,它不包括ō
使用显式编码编写(和读取)文件:

with open('foo.txt', 'wt', encoding='utf8') as outfile:
    outfile.write('\u014d')

关于python - 为什么Python不能从Latin Extended-A写入字符(写入文件时会出现UnicodeEncodeError)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55558785/

10-16 11:06