rtf 文件的错误字符编码

Wrong character encoding of rtf file

当我将句子 How brave they’ll all think me at home! 复制并粘贴到 Mac 上的空白 TextEdit rtf 文档中时,它看起来不错。但是如果我以编程方式创建一个明显相同的 rtf 文件,并在其中写入相同的句子,在打开 TextEdit 时它显示为 How brave they’ll all think me at home! 在下面的代码中,output 是可以的,但是在查看文件时TextEdit右单引号(此处用作撇号)有问题,unicode U-2019.

header = r"""{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf400
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f0\fs24 \cf0 """

sen = 'How brave they’ll all think me at home!'

with open('staging.rtf', 'w+’) as f:
    f.write(header)
    f.write(sen)
    f.write('}')

with open('staging.rtf') as f:
    output = f.read()
print(output)

我从 https://www.i18nqa.com/debug/utf8-debug.html 中发现,这可能是由于“UTF-8 字节被解释为 Windows-1252”引起的,这似乎是有道理的 ansicpg1252 在 header 中表示美国 Windows。

但我仍然不知道如何解决它,即使在这里阅读了类似的问题:。我试过用 mac 替换 ansi 但没有效果。在 open 函数中添加 ,encoding='utf8' 似乎也无济于事。

(顺便用rtf的原因是可以导出colour-coded个单词的句子,允许手动编辑,然后读回做进一步处理)。

好的,我自己找到了答案。我需要在写入 rtf 文件和读取文件时都使用 , encoding='windows-1252'