2015-08-11 2 views
-1

Как я могу получить/установить RTF-контент TTNTRichEdit в формате unicode (utf8/utf16)? Я использую методы TRichEdit.loadFromStream/saveToStream для TStringStreams для получения содержимого RTF. Но он использует только ANSI-коды, зависящие от локали, для нестандартных символов ASCII. (4x: \`f5) Но у меня будут проблемы, если пользователь перенесет его/ее проект на другой компьютер с другим языком. Национальные персонажи будут потеряны. Сообщения EM_STREAMIN/EM_SREAMOUT Флаг SF_UNICODE может сочетаться с SF_TEXT не с помощью SF_RTF.Как я могу получить содержимое unicode TTNTRichEdit в Delphi 7?

+0

Это моя проблема, дорогой Дэвид! Как я могу получить содержимое Unicode. Я желаю использовать unicode. Но TRichEdit не возвращает его мне (как я знаю). –

+2

Нет, я имею в виду прекратить использование элемента управления ANSI. Используйте Unicode Delphi или используйте элементы управления Unicode в своем не-Unicode Delphi. Исправьте проблему у источника. Прекратите использование ANSI 'TRichEdit'. –

+0

Я использую TTNTRichEdit, совместимый с unicode в priciple. Но в его установленной документации ничего не говорится о том, как я могу получить/установить свой контент rtf в unicode. Изменить компилятор теперь не вариант. Могли бы вы помянуть еще один компонент? –

ответ

1

У вас нет проблем. Вы используете компонент, совместимый с Unicode. Вы не потерпите потери данных. Из Wikipedia article on RTF:

Стандартный файл в формате RTF может состоять только из 7-битовых символов ASCII, но может кодировать символы за пределами ASCII экранирующей последовательности. Символьные escape-файлы имеют два типа: экранирование кодовых страниц и, начиная с RTF 1.5, Unicode escapes. В escape-последовательности кода две шестнадцатеричные цифры после обратного слэша и апострофа пишущей машинки используются для обозначения символа, взятого с кодовой страницы Windows. Например, если кодовая страница установлена ​​в Windows-1256, последовательность \'c8 будет кодировать арабскую букву bā' (ب).

Для запуска Unicode используется управляющее слово \ u, за которым следует 16-разрядное знаковое десятичное целое число, указывающее номер кода юникода UTF-16. Для программ без поддержки Unicode это должно сопровождаться ближайшим представлением этого символа на указанной кодовой странице. Например, \ u1576? даст арабское письмо bā' ب, указав, что более старые программы, не поддерживающие Unicode, должны сделать это как знак вопроса.

Вы наблюдаете за удалением кодовой страницы. Но все в порядке. Вот что такое \`f5. Символ находится на кодовой странице документа, и, следовательно, можно использовать escape-код. Если вы включаете символы вне кодовой страницы документа, тогда элемент управления будет использовать escape-код Unicode.

+0

Спасибо, Дэвид! Это прекрасное исследование и новая информация для меня. Но есть некоторые неопределенные вещи. Вот один экспорт RTF компонента : '{\ rtf1 \ ansi \ ansicpg1252 \ deff0 {\ fonttbl {\ f0 \ fnil \ fcharset238 BatangChe;} {\ f1 \ fnil Arial;}} {\ colortbl; \ red255 \ green0 \ blue0;} \ viewkind4 \ uc1 \ pard \ cf1 \ lang1038 \ f0 \ fs44 \ 'f5 \' fa \ 'fb \ cf0 \ f1 \ fs40 \ par}' Содержит кодовую страницу 1252, но моя Win использует 1250. И она содержит код ANSI char \ 'f5 с кодовой страницей 1252. Это странно для меня. Нет, я вижу. Это версия 1! –

+0

Это не совместимо с UC. –

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