Python: конвертировать файл RTF в юникод? - PullRequest
2 голосов
/ 03 февраля 2010

Я пытаюсь преобразовать строки в файле RTF в последовательность строк в кодировке Юникод, а затем выполнить сопоставление регулярных выражений в строках.(Мне нужно, чтобы они были в кодировке Unicode, чтобы я мог выводить их в другой файл.)

Однако мое сопоставление с регулярным выражением не работает - я думаю, потому что они не преобразуются в Юникод должным образом.

Вот мой код:

usefulLines = []
textData = {}

# the regex pattern for an entry in the db (e.g. SUF 76,22): it's sufficient for us to match on three upper-case characters plus a space
entryPattern = '^([A-Z]{3})[\s].*$'  

f = open('textbase_1a.rtf', 'Ur')
fileLines = f.readlines()

# get the matching line numbers, and store in usefulLines
for i, line in enumerate(fileLines):
    #line = line.decode('utf-16be') # this causes an error: I don't really know what file encoding the RTF file is in...
    line = line.decode('mac_roman')
    print line
    if re.match(entryPattern, line):
        # now retrieve the following lines, all the way up until we get a blank line
        print "match: " + str(i)
        usefulLines.append(i)

На данный момент, это печатает все строки, но ничего не печатает с соответствием - хотя оно должно совпадать.Кроме того, по какой-то причине строки печатаются с «/ par» в начале.Когда я пытаюсь распечатать их в выходной файл, они выглядят очень странно.

Отчасти проблема в том, что я не знаю, какую кодировку указать.Как я могу это выяснить?

Если я использую entryPattern = '^.*$', тогда я получаю совпадения.

Может кто-нибудь помочь?

1 Ответ

4 голосов
/ 03 февраля 2010

Вы даже не декодировали файл RTF. RTF - это , а не , просто простые текстовые файлы. Например, файл, содержащий «äöü», содержит:

{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1031 {\ fonttbl {\ f0 \ fswiss \ fcharset0 Arial;}}

{* \ generator Msftedit 5.41.15.1507;} \ viewkind4 \ uc1 \ pard \ f0 \ fs20 \ 'e4 \' f6 \ 'fc \ par

}

при открытии в текстовом редакторе. Таким образом, символы «äöü» кодируются как windows-1252, как объявлено в начале файла (äöü = 0xE4 0xF6 0xFC).

Для чтения RTF вам сначала понадобится что-то, что преобразует RTF в текст (уже задан здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...