Всем приветствие.
Есть проблема с отображением rtf в компонентах RichMemo и DBRichMemo
Текст получаю из MSSQLConnection+SQLQuery+DataSource сначала попробовал вставлять в компонент RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;
Получил отображение в кривой кодировке. Попробовал указать Font.Charset = russian_charset , не то.
Нагуглил компоненту DBRichMemo, подключил ее, в енй ровно та же проблема.
Причем, если использовать просто Memo или DBMemo то там криллица отображается нормально, но конечно текст не отформатирован.
Что можно сделать для нормального отображения кириллицы в Rich компонентах?
Добавлено спустя 4 минуты 22 секунды:
Заметил еще странность. Если использовать только RichMemo то текст отображается такой "Хабарова Елена " и т.д.
, а если одновременно задействовать еще и DBRichMemo то он становится почему-то и большего размера и отображается как "???? ????? ????" в обеих компонентах.
кодировка rich текста
Модератор: Модераторы
-
ElectroGuard
- новенький
- Сообщения: 71
- Зарегистрирован: 03.06.2016 11:10:22
Вот это: "Хабарова ЕленР" юникодовые 'кракозябры' (Хабарова Елена):
https://www.artlebedev.ru/decoder/
CP1251 -> UTF-8
То есть - это utf8 закодированный как cp1251, нужно это перекодировать назад в utf8.
https://www.artlebedev.ru/decoder/
CP1251 -> UTF-8
То есть - это utf8 закодированный как cp1251, нужно это перекодировать назад в utf8.
jsa писал(а):Font.Charset = russian_charset
ElectroGuard писал(а):Хабарова Елена
http://www.freepascal.ru/forum/viewtopic.php?f=5&t=25588&hilit=MSSQL&start=15
ElectroGuard писал(а):Вот это: "Хабарова ЕленР" юникодовые 'кракозябры' (Хабарова Елена):
https://www.artlebedev.ru/decoder/
CP1251 -> UTF-8
То есть - это utf8 закодированный как cp1251, нужно это перекодировать назад в utf8.
Если кракозябры юникодовые то как то странно еще в юникод переводить.
В любом случае ни
RichMemo1.Rtf := AnsiToUtf8 ( SQLquery1.FieldByName('Remark').AsString );
ни
RichMemo1.Rtf := Utf8ToAnsi ( SQLquery1.FieldByName('Remark').AsString );
Ничего не меняют.
К тому же вроде как Rich компоненты не поддерживают юникод (попадалась такая фраза пока гуглил)
Добавлено спустя 11 минут 49 секунд:
В данном случае проблема с той темой не пересекается никак.
Что установлено MSSQLConnection.CharSet:='UTF-8'; что неустановлено на результат отображения в Rich компонентах никак НЕ влияет.
jsa писал(а):В данном случае проблема с той темой не пересекается никак.
Что установлено MSSQLConnection.CharSet:='UTF-8'; что неустановлено на результат отображения в Rich компонентах никак НЕ влияет.
Тест берётся из базы, верно? Ну так и берите его в нужной кодировке.
jsa писал(а):К тому же вроде как Rich компоненты не поддерживают юникод (попадалась такая фраза пока гуглил)
Сделайте вот так, если не поддерживает UTF8, то покажет 1251:
Код: Выделить всё
MSSQLConnection.CharSet:='Windows-1251'; // или около того
RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;
А если поддерживает, то вот так:
Код: Выделить всё
MSSQLConnection.CharSet:='UTF-8';
RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;// без всякой хрени типа AnsiToUtf8 Utf8ToAnsi
Если первые два не работают, попробуйте вот так:
Код: Выделить всё
MSSQLConnection.CharSet:='UTF-8';
RichMemo1.Rtf := Utf8ToWinCP(SQLquery1.FieldByName('Remark').AsString);// вместо Utf8ToAnsi
Код: Выделить всё
MSSQLConnection.CharSet:='Windows-1251';
RichMemo1.Rtf := WinCPToUtf8(SQLquery1.FieldByName('Remark').AsString);//вместо AnsiToUtf8
.
Я сам всякие варианты пробовал, а этот Utf8ToWinCP не пробовал.
Он и сработал, спасибо.
Он и сработал, спасибо.
jsa писал(а):Он и сработал, спасибо.
Значит не поддерживает UTF-8.
Код: Выделить всё
MSSQLConnection.CharSet:='WinCP';
RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;
Код: Выделить всё
MSSQLConnection.CharSet:='cp1251';
RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;
Если не получится, посмотрите как в MSSQL называется кодировка cp1251 и задайте это название в CharSet
