Mandrake

78 7

О чем думаете?

 -Музыка

 -Поиск по дневнику

люди, музыка, видео, фото
Поиск сообщений в Mandrake

 -Подписка по e-mail

 
Получать сообщения дневника на почту.

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Дата регистрации: 29.06.2003
Записей в дневнике: 3812
Комментариев в дневнике: 15433
Написано сообщений: 25517
Популярные отчеты:
кто смотрел дневник по каким фразам приходят

Учим SynCE-KDE русскому языку

Понедельник, 09 Мая 2005 г. 22:30 (ссылка) + в цитатник

В настройках кодировки нигде нет, так что пирдется немного покодить. В сети мануалов на эту тему я не обнаружил, так что пришлось копаться самому. Ковыряться будем в исходниках, поэтому эти самые исходники нам нужны. Понадобится файл rapip.cpp, котрый и отвечает за протокол rapip в KDE. Покопался немного... Меня заинтересовала следующая строка:
code:
atom.m_str = QString::fromUcs2(entry->cFileName).ascii();

Сначала название файла декодируется из Ucs2 (юникод, используется в основном в sms-сообщениях, но как оказалось, еще и на покете), а потом кодируется в ascii. Нашел описание этой функции, в котором обнаружил следующее:
code:
If a codec has been set using QTextCodec::setCodecForCStrings(),
it is used to convert Unicode to 8-bit char;
otherwise this function does the same as latin1().

Т.е. если не установить кодировку, то функция ascii() будет работать так же, как и функция latin1(), т.е. результат будет только латинскими буквами (а остальное знаками вопроса, отсюда и проблема, кодеры просто не предусмотрели кодировки). Теперь нам нужна функуция setCodecForCStrings() класса QTextCodec. В описании есть несколько примеров, которые показывают, как надо работать с кодировками. Вернемся к rapip.cpp. В самом начале добавляем к прочим инклудам следующее:
code:
#include <qtextcodec.h>

Это даст возможность пользоваться классом QTextCodec. В самом конце файла в самое начало функции kdemain(int argc, char **argv) дописываем эти две строки:
code:
QTextCodec *codec = QTextCodec::codecForName("CP1251");
QTextCodec::setCodecForCStrings(codec);

Вместо CP1251 можно поставить KOI8-R, либо любую другую кодировку. Эти же действия необходимо проделать с raki.cpp. Компилируем, устанавливаем, подключаем девайс, открываем Konqueror, набираем rapip://. Вуаля! Русские буквы. Небольшое хирургическое вмешательство в код и все теперь работает.

Рубрики:  PocketPC (hp iPAQ hx2410)
Linux


davinchi   0 0 обратиться по имени Воскресенье, 10 Июля 2005 г. 02:54 (ссылка)
а про env("LANG") ты ничего не слышал?

$ man env
Ответить С цитатой В цитатник
Mandrake   78 7 обратиться по имени Воскресенье, 10 Июля 2005 г. 00:18 (ссылка)
сорри, слышал
а что мне переменные окружения?
предлагаешь парамтр функции codecForName() брать из переменной LANG?
ты для этого про env сказал?
Ответить С цитатой В цитатник
davinchi   0 0 обратиться по имени Суббота, 16 Июля 2005 г. 18:08 (ссылка)
да. или предлагать сделать выбор в настройках.
Ответить С цитатой В цитатник
Подписаться
Отписаться
К дневнику Страницы: [1] [Новые]
 

Добавить комментарий:
Текст комментария: показать смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
Подписаться на комментарии
Подписать картинку

Найти дневники