Я хочу сгенерировать все кодовые точки 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 или это просто заменители не может быть сохранен в файле. Как я могу хранить суррогаты в файле?