Russian Qt Forum
Сентябрь 21, 2024, 12:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите обучить kde4-кopete-сryptography русскому языку.  (Прочитано 3970 раз)
hsv
Гость
« : Июнь 19, 2009, 17:11 »

Всем доброго времени суток.

Есть в KDE4 "штатная" программа обмена сообщениями  "kopete"
Написана  на QT ( собрана с 4.5.1).
Для данной программы есть модуль PGP шифрования, оформленный в виде плагина (kde4-кopete-сryptography ).
При попытке "попользовать" данный плагин выяснилось, что он напрочь не понимает русского языка  Грустный

Русский терялся на приведении текста  сообщения toLatin1() перед передачей его в криптомодуль.
С помощью "парадного рашпиля" обратить еретика в "правильную веру" удалось, но есть подозрение, что
"мантра" (по причине моей далекости от QT ) выглядит несколько некошерно...

void CryptographyPlugin::finalizeMessage ( Kopete::Message & msg, const QString &intendedBody, const GpgME::VerificationResult & verificationResult, bool encrypted )
 {
//   Было (работало без кириллицы)
//   QString body = intendedBody;
//   заменено на
   QString body = QString::fromUtf8( intendedBody.toAscii() );

Будет ли данная замена корректной, и если нет, то как, с точки зрения опытных товарищей было-бы правильно?

Заранее спасибо.
Записан
Rcus
Гость
« Ответ #1 : Июнь 19, 2009, 18:37 »

Посмотрел svn, глянул багзиллу... extragear... Удивительно что одна эта строчка восстанавливает текст, судя по тому как автор обращался с кодировкой при шифровании это настоящее чудо :\
Записан
hsv
Гость
« Ответ #2 : Июнь 19, 2009, 23:38 »

Цитировать
осмотрел svn, глянул багзиллу... extragear... Удивительно что одна эта строчка восстанавливает текст, судя по тому как автор обращался с кодировкой при шифровании это настоящее чудо :\

Разумеется строчка не одна  Улыбающийся

Полный патч к плагину
https://bugs.kde.org/attachment.cgi?bugid=196141&action=viewall
привешен к багу
https://bugs.kde.org/show_bug.cgi?id=196141

Как говорится нам-бы сперва ехать, а шашечки потом.
В приведенном патче вызывает сомнение корректность замены
QString body = intendedBody;
на
QString body = QString::fromUtf8( intendedBody.toAscii() );
с точки зрения возможного сегфолта и утечек памяти, т.к. на вход идет
const QString &intendedBody, который как адрес "перевешивается" на внутреннюю переменную,
а QString::fromUtf8() - это вроде новая строка на основе битового массива...

Интересен вотпрос - насколько корректна ТАКАЯ врезка перекодировки и если "криво", то как будет "прямо".




Записан
Rcus
Гость
« Ответ #3 : Июнь 20, 2009, 09:27 »

Чтобы найти все случаи неявного перекодирования нужно определить QT_NO_CAST_FROM_ASCII в начале файла до инклудов (конечно будет много левых сообщений).

В общем нас интересуют все перекодирования в Latin1 (их надо заменять на toUtf8, и никак не на toLocal8Bit, иначе поимеем проблем с передачей между пользователями с разными локалями) и неявное преобразование fromAscii, которое помогает отловить упомянутый макрос, заменяем его на fromUtf8 (форматирование не трогаем, иначе дифф засоряется). У меня вроде работает, надо протестировать получше.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.