LINUX.ORG.RU

«Привет мир» не пропускается через tr(), кроме того, предполагаю, что файлов переводов у тебя нет.
А вообще, проверь, в какой кодировке у тебя исходник, скорее всего проблема в этом.

m0rph ★★★★★
()

есть еще методы setCodecFor*** - смотри в справке

tr, как верно отметили выше, используется для локализации приложений (а у тебя вообще не используется)

aol ★★★★★
()

tr - используется для системы переводов (локализации приложения ). Кодек надо устанавливать для локали setCodecForLocale и для QString setCodecForCStrings

Silerus ★★★★
()

Это я понял продолжение прошлой темы? Здесь:

  • У тебя конфликт, устройство использует одну кодировку, а в программе указывается другая. Я видел, что ты указываешь кодировку для программы, но не видел, что ты это делал для устройства… Хотя здесь я могу ошибаться.

  • Или да, надо самому менять кодировку на нужную. Но это редко. Обычно сам qt у себя внутри выполняет все необходимые преобразования.

Я позже ещё напишу, может даже пример приведу.

neon1ks ★★
()

Qt внутри использует кодировку UTF-16 или UCS-2. Обычно все файлы с кодом пишутся в UTF-8, Qt это знает. И сам перед выводом текста его преобразовывает в свою кодировку.

Обратно, например при сохранении, Qt уже наоборот текст преобразовывает в кодировку UTF-8. Всё это делается внутри, и пользователям не надо об этом беспокоиться.

Про смену кодировки Правильное преобразование кодировки в QString

neon1ks ★★
()

Ещё) Это ради шутки. Всегда есть возможность в C++ получить длину строки в байтах. Пишем текст, где только русские и английские символы: «жжжjjj» — 6 букв, три русские и три английские.

Затем получаем размер строки в байтах и смотрим на число:

  1. Если размер равен 6, то однобитная кодировка, Codepage 866 или Windows CP1251
  2. Если размер равен 9, то кодировка UTF-8
  3. Если размер равен 12, то кодировка UTF-16 или UCS-2

С выводом числа не должно быть проблем. =)

neon1ks ★★
()
Последнее исправление: neon1ks (всего исправлений: 1)
Ответ на: комментарий от neon1ks

P.S. Правда с Qt это это не работает… :(

QString qstr = "жжжjjj";
int qn = qstr.size();

std::string str = qstr.toStdString();
std::size_t n = str.size();

qDebug() << "qn = " << qn << endl;
qDebug() << "n = " << n << endl;

Метод QString::size() возвращает количество символов, а не размер в байтах. А метод QString::toStdString() вызывает метод QString::toUtf8().

Переведенная документация по Qt4 (в Qt5 мало отличий) http://doc.crossplatform.ru/qt/4.8.x/html-qt/qstring.html#converting-between-8-bit-strings-and-unicode-strings

Если знаешь английский, можешь почитать и актуальную документацию.

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

А метод std::String::size() возвращает размер в байтах, а не количество символов. Те, кто этого не знает, у них возникает путаница.

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