我正在尝试从 python 脚本将 unicode 文本输出到 RTF 文件。对于背景,维基百科 https://en.wikipedia.org/wiki/Rich_text_format#Character_encoding says
对于 Unicode 转义,使用控制字 \u,后跟给出 Unicode UTF-16 代码单元编号的 16 位有符号十进制整数。为了使不支持 Unicode 的程序受益,后面必须跟上指定代码页中该字符的最接近的表示形式。例如,\u1576?会给出阿拉伯字母 bā´ à,指定不支持 Unicode 的旧程序应将其呈现为问号。
还有这个关于从Java输出RTF的问题 https://stackoverflow.com/questions/7894772/writing-unicode-to-rtf-file and 这是关于在 C# 中这样做的 https://stackoverflow.com/questions/1368020/how-to-output-unicode-string-to-rtf-using-c.
但是,我不知道如何从Python将unicode代码点输出为“具有Unicode UTF-16代码单元编号的16位有符号十进制整数”。我试过这个:
for char in unicode_string:
print '\\' + 'u' + ord(char) + '?',
但在文字处理器中打开时,输出只会呈现为乱码;问题似乎是它不是 UTF-16 代码。但不知道如何得到它;虽然可以用utf-16编码,但是如何获取编码号呢?
顺便说一句,PyRTF 不支持 unicode(它被列为“todo”),虽然 Pyrtf-NG 应该这样做,但该项目似乎没有维护并且几乎没有文档,所以我对在准项目中使用它持谨慎态度。 -生产系统。
Edit:我的错。上面的代码中有两个错误 - 正如下面 Wobble 所指出的,字符串必须是 unicode 字符串,而不是已经编码的字符串,并且上面的代码生成的结果中字符之间有空格。正确的代码是这样的:
convertstring=""
for char in unicode(<my_encoded_string>,'utf-8'):
convertstring = convertstring + '\\' + 'u' + str(ord(char)) + '?'
这工作得很好,至少对于 OpenOffice 来说是这样。我将其留在这里作为其他人的参考
(在下面的讨论后进一步纠正了一个错误)。