如果你看一下 RTF 编码 Unicode 的方式,它总是在一个 Unicode 字符后跟一个 0x3f 字符,这是一个问号:
\u20181\'3f\u20182\'3f\u20183\'3f\u30340\'3f
这里有人知道为什么会这样吗?是否只是为了保持与 pre-Unicode RTF 阅读器的兼容性?
\'3f
代表十六进制字符。在这种情况下(在 Python 的帮助下),一个问号。这取决于当前选择的代码页,它没有显示在提供的 RTF 中,但无论它是什么,都不支持该代码页中的这些字符:
>>> chr(0x3f)
'?'
Unicode 字符是
仕他仗的
(再次借助 Python 的帮助):
>>> chr(20181)+chr(20182)+chr(20183)+chr(30340)
'仕他仗的'
在我生成并保存为 RTF 格式的 Word 文档中,
\u-26004\'c2\'ed\u20811\'bf\'cb
是两个字符 马克
。 c2 ed
和 bf cb
是由 \fcharset134
在文档前面选择的中文编码等价物。
>>> chr(-26004 & 0xffff) + chr(20811) # 0xffff mask needed to limit 2s complement to 16 bits.
'马克'
>>> bytes.fromhex('c2 ed bf cb').decode('chinese')
'马克'
有关更多信息,请阅读 RTF 规范: