Название: Помогите обучить 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 (форматирование не трогаем, иначе дифф засоряется). У меня вроде работает, надо протестировать получше. |