Делаю в TEA чтение формата RTF. Этот формат был придуман программистами Майкрософт в середины восьмидесятых, в ходе работы над Вордом. Согласно красивой легенде, синтаксис RTF был вдохновлен языком разметки TeX. В самом деле, и там, и там есть буквы. С точки зрения программиста, RTF гнусен. Чтобы научиться читать RTF правильно, мало знать его спецификацию. Надо провести еще некоторые исследования способом обратной инжерении. Текст хранится в RTF разными способами. Если это английские буквы, они помещены в файле, как есть (в семибитной кодировке). Если это буквы других алфавитов, то они могут быть как в восьмибитной кодировке, так и в юникоде. Способ, как узнать, используется юникод или нет, в формате не определен. Рассуждая логически, я пришел к выводу, что - если в RTF-файле не указана кодовая страница восьмибитной кодировки, значит, текст всё же в юникоде. А это два разных способа разбора текста. Ведь не просто так лежат в RTF эти буквы. Если они восьмибитные, то они имеют формат: \'шестнадцатиричное значение. Пример: \'c4\'e0\'ed\'ed\'ee\'e5 Чтобы программно прочесть эту последовательность, надо: 1. Разобрать строку на элементы, избавившись от разделителей \'. 2. Каждый элемент превратить из текста в целое число. При этом важно учитывать, что в текстовом элементе число содержится в 16-ричном виде. 3. Перевести элемент из кодировки, указанной в заголовке RTF-файла, в юникод (потому что Qt работает с юникодом). А если в RTF уже лежит текст в юникоде? Не всё так просто! Он лежит там в закодированном виде: \u1072\'3f\u1103\'3f \u1084\'3f\u1086\'3f\u1078\'3f\u1077\'3f\u<wbr>1090\'3f Тут задача следующая: 1. Разобрать на элементы. 2. Очистить каждый от ограничителей и удаляя недокументированный '3f. 3. Теперь в каждом элементе у нас есть десятиричный код символа, который перевести в юникод уже просто: QChar (code); Но! Мы временно забыли о командах разметки RTF. Пример текста, смешанного с такими командами: ------- par \pard\plain \ltrpar\s3\cf0{\*\hyphen2\hyphlead2\hyph<wbr>trail2\hyphmax0}\aspalpha\sa120\ql\rtlch\a<wbr>f4\afs24\lang255\ltrch\dbch\af3\langfe25<wbr>5\hich\f0\fs24\lang1049\loch\f0\fs24\lan<wbr>g1049 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f0\fs24\lang1049\i0\b0 \u1041\'3f\u1088\'3f\u1072\'3f\u1091\'3f\u<wbr>1079\'3f\u1077\'3f\u1088\'3f Elinks (http://elinks.or.cz) --------- Нам нужно его очистить от команд. Есть много способов это сделать. Я начал писать свой алгоритм, потом нашел в сети другой, переделал его (что дало прирост в скорости обработки примерно в 5-6 раз). Но! Очистка эта хавает семибитный текст и юникод, а вот декодированный (в тот же юникод) из восьмибитной кодировки текст обрабатывать не хочет. Над исправлением чего я сейчас и работаю. А сейчас сказка про волшебный горшок. Так было в жизни. Мальчику Диме купили новый ночной горшок. Дима туда покакал, посмотрел и удивился - горшок был пуст! И Дима позвал папу Сережу. Тот пришел и предложил - а давай я туда ногу засуну. Так и сделал. А потом покраснел, стал кричать - ой, нога! нога! А мальчик Дима стоит и хохочет. Думает, папка шутит. Но вот упал папа Сережа и нет у него пятки и всего, что дальше. Только кровь хлыщет - фыш! Позови, говорит, мамку. Прибежала мама Катя, помазала там где нет пятки зеленкой, а в это время из горшка высунулась рука и оторвала маме Кате нос. А наверху жил дядя доктор, он услышал крики, спустился, пришил маме Кате нос, а потом посмотрел на горшок и сказал - это же научное открытие! нужно отнести его в Академию наук! Взял и отнес. Стали там академики изучать горшок в центрифуге, а потом выставили его в музее. И все, кто приходил на нее смотрел, исчезали.