кодировка rich текста

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

кодировка rich текста

Сообщение jsa » 22.02.2018 10:42:52

Всем приветствие.
Есть проблема с отображением rtf в компонентах RichMemo и DBRichMemo
Текст получаю из MSSQLConnection+SQLQuery+DataSource сначала попробовал вставлять в компонент RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;
Получил отображение в кривой кодировке. Попробовал указать Font.Charset = russian_charset , не то.
Нагуглил компоненту DBRichMemo, подключил ее, в енй ровно та же проблема.
Причем, если использовать просто Memo или DBMemo то там криллица отображается нормально, но конечно текст не отформатирован.

Что можно сделать для нормального отображения кириллицы в Rich компонентах?

Добавлено спустя 4 минуты 22 секунды:
Заметил еще странность. Если использовать только RichMemo то текст отображается такой "Хабарова Елена " и т.д.
, а если одновременно задействовать еще и DBRichMemo то он становится почему-то и большего размера и отображается как "???? ????? ????" в обеих компонентах.
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

Re: кодировка rich текста

Сообщение ElectroGuard » 22.02.2018 12:55:12

Вот это: "Хабарова ЕленР" юникодовые 'кракозябры' (Хабарова Елена):
https://www.artlebedev.ru/decoder/
CP1251 -> UTF-8
То есть - это utf8 закодированный как cp1251, нужно это перекодировать назад в utf8.
ElectroGuard
новенький
 
Сообщения: 71
Зарегистрирован: 03.06.2016 12:10:22

Re: кодировка rich текста

Сообщение vitaly_l » 22.02.2018 13:11:45

jsa писал(а):Font.Charset = russian_charset

ElectroGuard писал(а):Хабарова Елена

http://www.freepascal.ru/forum/viewtopic.php?f=5&t=25588&hilit=MSSQL&start=15
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: кодировка rich текста

Сообщение jsa » 22.02.2018 18:55:46

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
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

Re: кодировка rich текста

Сообщение vitaly_l » 22.02.2018 19:45:07

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

:?:

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: кодировка rich текста

Сообщение jsa » 22.02.2018 20:12:29

Я сам всякие варианты пробовал, а этот Utf8ToWinCP не пробовал.
Он и сработал, спасибо.
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

Re: кодировка rich текста

Сообщение vitaly_l » 22.02.2018 20:29:25

jsa писал(а):Он и сработал, спасибо.

Значит не поддерживает UTF-8.

:roll: А вот так:
Код: Выделить всё
MSSQLConnection.CharSet:='WinCP';
RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;

Код: Выделить всё
MSSQLConnection.CharSet:='cp1251';
RichMemo1.Rtf := SQLquery1.FieldByName('Remark').AsString;

:?:
Если не получится, посмотрите как в MSSQL называется кодировка cp1251 и задайте это название в CharSet
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 29

Рейтинг@Mail.ru