Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Edynchik от Апрель 11, 2011, 09:52



Название: Проблемы с кодировкой
Отправлено: Edynchik от Апрель 11, 2011, 09:52
Установил в Visual Studio 2008 Qt add-in и библиотеку, вроде все нормально компилируется. Только возникла одна проблема: При помещении след. кода
Код:
QString s = "Введите КОД";
QLocale local;
local = locale();
if(ui.lineEdit->text() == "")
ui.label_2->setText(s);
в label_2 выдается абракадабра...что можно с этим сделать?


Название: Re: Проблемы с кодировкой
Отправлено: Hellraiser от Апрель 11, 2011, 10:05
Поискать по форуму и почитать в книгах. Тема даже не в вопросах новичков, ну сколько уже можно поднимать такие вопросы...


Название: Re: Проблемы с кодировкой
Отправлено: andrew.k от Апрель 11, 2011, 10:57
QString::setCodecFor*


Название: Re: Проблемы с кодировкой
Отправлено: dsp от Апрель 12, 2011, 19:44
QString::fromLocal8Bit("Русский текст");


Название: Re: Проблемы с кодировкой
Отправлено: blood_shadow от Апрель 12, 2011, 21:51
assistant -> класс QString -> секция Initializing a String
там написано почему так или книга Бланшет - раздел "Интернационализация"


Название: Re: Проблемы с кодировкой
Отправлено: andrew.k от Апрель 13, 2011, 09:32
QString::fromLocal8Bit("Русский текст");
Писать это каждый раз мягко говоря неудобно.


Название: Re: Проблемы с кодировкой
Отправлено: dsp от Апрель 13, 2011, 21:14
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Апрель 14, 2011, 10:26
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
в таком случае, в linux тоже все корректно будет отображаться?


Название: Re: Проблемы с кодировкой
Отправлено: Nimbus от Апрель 14, 2011, 10:51
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); //Для нормальных людей
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251")); //Для студии
Всё зависит от кодировки исходников, которые создаёт твоя IDE


Название: Re: Проблемы с кодировкой
Отправлено: blood_shadow от Апрель 14, 2011, 11:42
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); //Для нормальных людей
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251")); //Для студии
Всё зависит от кодировки исходников, которые создаёт твоя IDE
причем тут студия? все зависит от ОС, если ОС линукс то по умолчанию будет UTF-8
если ОС виндовс или мак будет использоваться кодировка которая в системе по умолчанию
она отображается как системная, например у меня криэтор под виндой и он использует
системную кодировку по умолчанию(ср1251), но такое поведение можно изменить в настройках,
выбрав необходимую кодировку текста, кода:

Код
C++ (Qt)
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale())
 

хватает с головой для любой локали, и к тому же код стает переносимым между разными ОС


Название: Re: Проблемы с кодировкой
Отправлено: BRE от Апрель 14, 2011, 11:46
хватает с головой для любой локали, и к тому же код стает переносимым между разными ОС
Ты хотел сказать НЕ переносимым?


Название: Re: Проблемы с кодировкой
Отправлено: Пантер от Апрель 14, 2011, 11:48
Ну и я тут такой вклинюсь со своей подписью (пункт 2).


Название: Re: Проблемы с кодировкой
Отправлено: blood_shadow от Апрель 14, 2011, 11:55
хватает с головой для любой локали, и к тому же код стает переносимым между разными ОС
Ты хотел сказать НЕ переносимым?

я имел ввиду на уровне кодировки символов, то есть если мы возьмем файлы с линукса
в которых была кодировка "UTF-8" и было установлено:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
то после транспортировки этого кода под винду, преобразования кириллицы не будет коректным
так как в винде "CP1251", во время конвертации строки char* в QString будет будет использоватся
конвертация с "UTF-8" в "UTF-16", как указано в QTextCodec::setCodecForCStrings и в итоге мы увидим
кракозябры
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale())
будет работать везде коректно


Название: Re: Проблемы с кодировкой
Отправлено: Авварон от Апрель 14, 2011, 13:13
при переносе файла с оси на ось кодировка не меняется О_о
она может поехать при пересохранении, но блин, настройте вашу ИДЕ на утф-8


Название: Re: Проблемы с кодировкой
Отправлено: dsp от Апрель 14, 2011, 19:32
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
в таком случае, в linux тоже все корректно будет отображаться?
Я это и пишу в линуксе!


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Апрель 15, 2011, 09:42
Спасибо,
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
при инициализации экземпляра класса работает хорошо, но вот еще один попутный вопрос: Как толково преобразовать QChar в int? Суть в том что есть шестанциричная строка Qstring, преобразуется в массив QChar для посимвольного сложения.


Название: Re: Проблемы с кодировкой
Отправлено: BRE от Апрель 15, 2011, 09:48
Спасибо,
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
Не надо так делать.
Лучше разберись один раз как работать с кодировками, что и когда  во что преобразовывается, как использовать локализации и т.д.
В дальнейшем ты избавишь себя, а может и других разработчиков сопровождающих твой код, от не нужных проблем.
Кстати, на форуме уже очень много раз поднимались аналогичные темы.  ;)


Название: Re: Проблемы с кодировкой
Отправлено: Пантер от Апрель 15, 2011, 10:09
Цитировать
Кстати, на форуме уже очень много раз поднимались аналогичные темы
Как это ты так мягко сказал. Если честно, уже задолбали эти темы по несколько раз в месяц.


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Апрель 15, 2011, 12:36
Как толково преобразовать QChar в int? Суть в том что есть шестанциричная строка Qstring, преобразуется в массив QChar для посимвольного сложения.



Название: Re: Проблемы с кодировкой
Отправлено: mutineer от Апрель 15, 2011, 12:47
Как толково преобразовать QChar в int? Суть в том что есть шестанциричная строка Qstring, преобразуется в массив QChar для посимвольного сложения.

int QChar::digitValue () const
не то?


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Апрель 15, 2011, 13:01
Цитировать
int QChar::digitValue () const
не то?

да...точно...спасибо...только шестнадцатиричные числа определяются как -1...можно с этим что нибудь сделать?


Название: Re: Проблемы с кодировкой
Отправлено: blood_shadow от Апрель 15, 2011, 19:06
Цитировать
int QChar::digitValue () const
не то?

да...точно...спасибо...только шестнадцатиричные числа определяются как -1...можно с этим что нибудь сделать?
что-то я не нашел, напиши свою ф-цию, возьми unicode () с каждого символа(числовой код),
пробей по таблице числовых кодов и сравни с тем что лежит в твоем чаре, вот и все


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Апрель 18, 2011, 08:07
ну да...сделал нечто подобное...спасибо всем)


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Май 25, 2011, 10:49
а еще...Подскажите пожалуйста...если используешь линукс для вывода русских букв на экран надо писать нечто:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("KOI8-R"));
...но в этой же проге чтобы прочитать файл из win(с кодировкой CP1251) надо написать нечто:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));
...но не работает...читаются козяблики...подскажите как исправить или по другому надо делать?


Название: Re: Проблемы с кодировкой
Отправлено: kambala от Май 25, 2011, 11:02
линукс разве не понимает UTF-8?


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Май 25, 2011, 11:12
линукс разве не понимает UTF-8?
онимает навенрное,только я же вывожу русские буквы в textEdit,а когда ставишь UTF-8 пишет кракозябры...


Название: Re: Проблемы с кодировкой
Отправлено: blood_shadow от Май 25, 2011, 13:14
линукс разве не понимает UTF-8?
онимает навенрное,только я же вывожу русские буквы в textEdit,а когда ставишь UTF-8 пишет кракозябры...
textEdit работает в UTF-16, если у тебя текст в UTF-8 тебе надо:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Май 25, 2011, 13:47
Ну незнаю насчет UTF-16,но в МСВС в TextEdit русские буквы корректно выводятся только в KOI8-R. Но суть в том что если я сначала пишу
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("KOI8-R"));
, то после 
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));
не выполняется...и при разборе файла windows при чтении русских букв появляются кракозябры, и наооборот если сначала 
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));
и прочитать файл, то потом
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("KOI8-R"));
не сработает и выдаст кракозябры...вот в чем дело...


Название: Re: Проблемы с кодировкой
Отправлено: blood_shadow от Май 25, 2011, 14:21
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));
незнаю где ты такую кодировку нашел, но я ее в supported encodings ненашел,
а вот Windows-1251 там есть, посмотри в ассистанте QTextCodec


Название: Re: Проблемы с кодировкой
Отправлено: LisandreL от Май 25, 2011, 15:23
незнаю где ты такую кодировку нашел, но я ее в supported encodings ненашел,
а вот Windows-1251 там есть, посмотри в ассистанте QTextCodec
Это одно и тоже.


Название: Re: Проблемы с кодировкой
Отправлено: Fat-Zer от Май 25, 2011, 15:37
Это одно и тоже.
а кьют точно знает об этом?


Название: Re: Проблемы с кодировкой
Отправлено: GreatSnake от Май 25, 2011, 15:43
Это одно и тоже.
а кьют точно знает об этом?
Точно.


Название: Re: Проблемы с кодировкой
Отправлено: Edynchik от Май 26, 2011, 08:17
да проблема не в том что кто про какую кодировку знает,а в том что
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(""));
второрй раз не срабатывает...