Запись суррогатного Unicode в файл в Python 3 - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу сгенерировать все кодовые точки Unicode в Python и записать их в файл для чтения другой программой (Go). У меня есть что-то вроде этого:

# store code points by category
categories = collections.defaultdict(list)
for c in map(chr, range(sys.maxunicode + 1)):
    categories[unicodedata.category(c)].append(c)

# write unicodes to file
for cc, cp in enumerate(categories):
    with open(cc+'.utf8', "wb") as f:
        list(map(lambda c: f.write(c.encode('utf_8','strict')), cp))

Я генерирую все кодовые точки по категориям и сохраняю их в кодировке utf8. Так что это работает со всеми кодовыми точками, кроме суррогатов (категория C). Я получаю ошибку

UnicodeEncodeError: 'utf-8' codec can't encode character '\ud800' in position 0: surrogates not allowed

Копая вокруг , я обнаружил, что могу обойти ошибку с surrogatepass, но похоже, что моя программа Go на другом конце подобрана недопустимые кодовые точки U+FFFD (я использую "unicode/utf8").

Я не уверен, является ли это проблемой в конце Python или Go или это просто заменители не может быть сохранен в файле. Как я могу хранить суррогаты в файле?

...