LINUX.ORG.RU

Qt проблемы с кодировками


0

1

Учу qt, поэтому прошу - сильно не пинайте

Локаль системы - utf8 Исходный код - utf8

Но почему то вместо русских буковок в моих програмах кракозябры... из за чего такое может быть? :(

Опустись пару тем ниже там был такой вопрос

anonymous
()

Вроде надо было сделать че то типа setCodecForStrings() и setCodecForCStrings() и еще можно посмотреть хелп по QTranslator

imp ★★
()

> Локаль системы - utf8 Исходный код - utf8

То есть ты в _исходниках_ по-русски пишешь? Если да, то открой для себя tr(), lupdate, lrelease и Qt Linguist.

Shmuma
()
Ответ на: комментарий от BlastBeat

>В программе используешь только английский. А переводишь на другие языки уже с помощью Linguist.

Я тоже так делал сначала, но если прога делается для себя / для заказчика и не предполагает перевода на др. языки то можно писать и в коде по русски. Надо просто дефаултные кодеки для String/CString поставить.

imp ★★
()
Ответ на: комментарий от imp

QTextCodec::setCodecForTr(QTextCodec::codecForName("KOI8-R"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("KOI8-R"));

Один раз вначале программы это зовешь потом можешь везде писать по-русски. KOI8-R замени на свою кодировку в которой текст в коде написан

imp ★★
()
Ответ на: комментарий от imp

Хм, зачем плохому учишь?

Даже если программа пишется только для себя, то это, ИМХО, не оправдание таким ляпам как русский текст в коде.

Это было бы оправдано, если бы нормальный путь был бы слишком сложен, но в данном случае это вовсе не так. Всего-то надо:

1. все строки пишем по английски, и заключаем их в tr()
2. в *.pro файле пишем TRANSLATIONS = прога_ru.ts
3. запускаем lupdate
4. переводим в Qt Translator'е
5. запускаем lrelease
6. копируем из документации кусок кода (4 строки) подключения файла с переводами.

Все! Это правильный и простой путь поддержки _любого_ языка в Qt. Нафига эти извращения с QTextCodec? Завтра ты решишь сменить системную локаль, и что, будешь перекомпилироавать?

Shmuma
()
Ответ на: комментарий от Shmuma

> Все! Это правильный и простой путь поддержки _любого_ языка в Qt.

Только не надо фанатизма. :) Если перевод на иностранные языки не планируется, то нафига все строки переводить на английский, а потом обратно на русский? Не изврат ли? Достаточно просто все русские строки в исходниках явным образом преобразовать в QString: s = QString::fromUtf8("многа букаф"). Естественно, кодировка исходников должна быть UTF-8. :)

Ещё есть полезные функции QString::fromLocal8Bit() и QString::toLocal8Bit(). Пусть название никого не смушает, с локалью UTF-8 они тоже работают. Как и с любой другой. =)

ero-sennin ★★
()
Ответ на: комментарий от ero-sennin

Когда точно знаешь зачем и как ты делаешь, то да, можно и поизвращаться. Но когда учишься -- ни в коем случае. Вырабатываются привычки, от которых потом бывает трудно избавиться.

Русский текст в исходниках это одна из тех вещей за которую надо бить железной линейкой по рукам, ибо нет никаких гарантий что однажды написанная "для себя" прога не понадобится кому-то еще.

Shmuma
()
Ответ на: комментарий от Shmuma

>Все! Это правильный и простой путь поддержки _любого_ языка в Qt. Нафига эти извращения с QTextCodec? Завтра ты решишь сменить системную локаль, и что, будешь перекомпилироавать?

Ну на самом деле Qt всегда строки внутри себя преобразует в UTF-8. Так что меняй не меняй локаль ничего страшного не будет. Вот у меня программа с такой вставкой компиляется из того же исходника и под винду и под Линукс и работает без проблем. В коде весь текст набран в Cp1251, в Линухе кодировка KOI8-R. Писать по английски и потом переводить - это безусловно правильно, но у меня прога для местного заказчика и сильно завязана на БД где все данные по русски в CP1251... :(

imp ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.