rtf文件的字符编码错误

时间:2019-04-21 21:38:12

标签: python character-encoding rtf

当我将句子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似乎表示美国视窗。

但是,即使在这里阅读了类似的问题,Encoding of rtf file,我仍然无法解决。我尝试将ansi替换为mac无效。将,encoding='utf8'添加到打开功能似乎也无济于事。

(顺便使用rtf的原因是能够导出带有颜色编码的单词的句子,允许对其进行手动编辑,然后再读回以进行进一步处理)。

1 个答案:

答案 0 :(得分:0)

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