Я пытаюсь вывести текст Unicode в файл RTF из скрипта Python. Для фона Википедия говорит
Для экранирования Unicode используется управляющее слово \ u, за которым следует 16-разрядное целое число со знаком, дающее номер кодовой единицы Unicode UTF-16. В интересах программ без поддержки Unicode, это должно сопровождаться ближайшим представлением этого символа в указанной кодовой странице. Например, \ u1576? даст арабскую букву bāʼ ب, указывающую, что старые программы, которые не поддерживают Unicode, должны отображать его вместо знака вопроса.
Существует также этот вопрос о выводе RTF из Java и этот вопрос о том, как делать это в C # .
Однако я не могу понять, как вывести кодовую точку Unicode как «16-разрядное десятичное целое число со знаком с номером кодовой единицы Unicode UTF-16» из Python. Я пробовал это:
for char in unicode_string:
print '\\' + 'u' + ord(char) + '?',
но вывод отображается только как бессмысленный при открытии в текстовом процессоре; проблема заключается в том, что это не кодовый номер UTF-16. Но не уверен, как это получить; хотя можно кодировать в utf-16, как получить кодовый номер?
Кстати, PyRTF не поддерживает Unicode (он указан как «todo»), и хотя pyrtf-NG должен это делать, этот проект, похоже, не поддерживается и имеет мало документации, поэтому я опасаюсь его в квазипроизводственной системе.
Редактировать: Моя ошибка. В приведенном выше коде есть две ошибки - как указано в Wobble ниже, строка должна быть строкой Unicode, а не уже закодированной, и приведенный выше код дает результат с пробелами между символами. Правильный код такой:
convertstring=""
for char in unicode(<my_encoded_string>,'utf-8'):
convertstring = convertstring + '\\' + 'u' + str(ord(char)) + '?'
Это отлично работает, по крайней мере, с OpenOffice. Я оставляю это здесь как ссылку для других
(одна ошибка была исправлена после обсуждения ниже).