2014-11-11 1 views
0

Я пытаюсь преобразовать некоторые файлы из RTF в текст. Оригиналы были созданы с некоторым приложением Windows (возможно, Word), но преобразование происходит на сервере Linux. Инструмент, который я хочу использовать, - unrtf, поскольку он поставляется с моим дистрибутивом Linux (SLES !!. X), предварительно установленным ... или, по крайней мере, мне не нужно было его заполнять.encoding: unrtf SYMBOL.charmap необходимо изменить

Довольно много документов на unrtf. Он работает хорошо, и есть справочная страница с некоторой ограниченной информацией. Моя проблема заключается в том, что выдается кодировка ISO-8859-1, и мне нужен ISO-8859-15, чтобы получить символ евро (€). То, что я получаю, является не символом (¬). Просмотр документа в шестнадцатеричном режиме Я вижу, что есть значение xAC00 в точке, где должен быть символ.

Поиск в Интернете Я выяснил, что € имеет значение unicde x20AC и ¬ имеет значение unicode x00AC. Немного больше поисков, предложенных для кодирования ISO-8859-15, правильным значением будет x00A4. Большая часть информации, которую я нашел, была противоречивой и запутанной (не говоря уже о том, что в конце концов unrtf).

Среди команд я попытался это:

unrtf --text $RTF > $XRTF 
unrtf --text $RTF | iconv -c -f UTF-8 -t ISO-8859-15 > $XRTF 

где $ RTF и $ XRTF являются входные и выходные файлы соответственно. Я проверил предполагаемую кодировку моего файла rtf с помощью

file -bi $RTF 

, и это вернуло ответ ISO-8859-1. Так что я попытался следующие:

unrtf --text $RTF | iconv -c -f ISO-8859-1 -t ISO-8859-15 > $XRTF 

В одном заключительном хвататься за соломинку, я попытался создать свой собственный файл SYMBOL.charmap и изменил значение для символа не в «U < 20AC>», который является синтаксис для этого файла , Тогда я попробовал команду:

unrtf --text -P $HOME/usr/local/share/unrtf $RTF > $XRTF 

Все эти попытки не достигли абсолютно ничего ... кроме второго, который просто удалили не символ в целом в силу опции -c (я думаю).

У кого-нибудь есть идеи о том, как я мог бы достичь желаемого преобразования?

ответ

0

У меня нет полного решения, но у меня есть эффективная работа. Прежде всего следует отметить, что кодировки ISO-8859-1 и ISO-8859-15 практически одинаковы (см. this link). Есть 8 отличий. Во-вторых, как отображаются символы, зависит от программного обеспечения, читающего файл, и не на программном обеспечении для преобразования (в данном случае unrtf).

Таким образом, задача сводится только к одному символу (€ вместо ¬), так как другие не используются в соответствующих файлах. Это сводится к изменению «xAC» на «xA4» в каждом файле после преобразования. Это можно сделать с помощью простой команды СЕПГ:

sed 's/\xAC/\xA4/g' temp1.txt > temp2.txt 

Вот и все. Как я уже сказал: это обход.

Изменение файла SYMBOL.charmap должно было сработать, но тогда я не эксперт по unrtf, так что, возможно, я просто сделал это неправильно.

Смежные вопросы