Неправильная кодировка символов файла RTF - PullRequest
2 голосов
/ 22 апреля 2019

Когда я копирую и вставляю предложение How brave they’ll all think me at home! в пустой документ TextEdit RTF на Mac, это выглядит нормально. Но если я создаю явно идентичный 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 в заголовке указывает на американскую Windows ,

Но я все еще не могу понять, как это исправить, даже прочитав похожую проблему здесь: Кодировка файла rtf . Я пытался заменить ansi на mac безрезультатно. И добавление ,encoding='utf8' к функции открытия, похоже, тоже не поможет.

(Между прочим, причина использования rtf заключается в возможности экспортировать предложения со словами с цветовой кодировкой, разрешить их редактирование вручную, а затем считывать обратно для дальнейшей обработки).

1 Ответ

0 голосов
/ 22 апреля 2019

ОК, я нашел ответ сам.Мне нужно было использовать , encoding='windows-1252' как при записи в файл rtf, так и при чтении из него.

...