Обязательное вступление, отмечающее, что я провел какое-то исследование
Кажется, что это должно быть просто (я рад закрыть как дубликат, если найден подходящий целевой вопрос),но я недостаточно знаком с кодировкой символов и тем, как Python обрабатывает их, чтобы разобраться с этим самостоятельно.Имея риск показаться ленивым, я отмечу, что ответ очень хорошо может быть в одной из ссылок ниже, но я еще не видел его в своем чтении.
Я ссылался на некоторые документы: Unicode HOWTO , codecs.py docs
Я также рассмотрел некоторые старые вопросы SO с большим количеством голосов: Запись текста Unicode в текстовый файл? , Python, Unicode и консоль Windows
Вопрос
Вот пример кода 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
( официальный источник Unicode )
Я даже могу вывести символ на консоль Windows (но он отображается как обычный 'o'):
>>> print('\u014d')
o