Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: hsv от Июнь 19, 2009, 17:11



Название: Помогите обучить kde4-кopete-сryptography русскому языку.
Отправлено: 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() );

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

Заранее спасибо.


Название: Re: Помогите обучить kde4-кopete-сryptography русскому языку.
Отправлено: Rcus от Июнь 19, 2009, 18:37
Посмотрел svn, глянул багзиллу... extragear... Удивительно что одна эта строчка восстанавливает текст, судя по тому как автор обращался с кодировкой при шифровании это настоящее чудо :\


Название: Re: Помогите обучить kde4-кopete-сryptography русскому языку.
Отправлено: hsv от Июнь 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() - это вроде новая строка на основе битового массива...

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






Название: Re: Помогите обучить kde4-кopete-сryptography русскому языку.
Отправлено: Rcus от Июнь 20, 2009, 09:27
Чтобы найти все случаи неявного перекодирования нужно определить QT_NO_CAST_FROM_ASCII в начале файла до инклудов (конечно будет много левых сообщений).

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