Qt unicode и умляуты

Поскольку мы преобразовали все наши исходные файлы и файлы заголовков в Unicode, у нас возникли проблемы с немецкими умляутами. В исходном коде все в порядке, но QLabels и другие компоненты графического интерфейса показывают искаженные умляуты.

Исходный код ISO-8859-1 работает нормально, но вызывает проблемы при переключении между OSX и Windows.

Есть ли что-нибудь, что я должен установить в файле проекта?

Среда: Qt 4.7 с Qt Creator 2.3.0 с использованием MinGW в Windows XP SP3

Пример


person atamanroman    schedule 29.06.2011    source источник
comment
Похоже, ваш вывод не ожидает UTF-8. Вы должны как-то настроить его для этого.   -  person Kerrek SB    schedule 29.06.2011
comment
Вероятно, ваш исходный файл закодирован в UTF-8, и при открытии в Windows он думает, что он закодирован в ISO-8859?   -  person RedX    schedule 29.06.2011
comment
@RedX: Qt должен абстрагироваться от всего этого, поэтому нам действительно не нужно знать, о чем думает Windows. Как-то я думаю, ответ должен быть о Qt.   -  person Kerrek SB    schedule 29.06.2011
comment
@Kerrek в конечном итоге это компилятор, который преобразует эту строку в байты, который выбирает, является ли 'Ä' Unicode'A + ˝ 'или Unicode'Ä' или ASCII'Ä ', и он может (до C ++ 0x) знать это только из файла кодирование. он может сделать QString :: fromUTF8 или QString :: fromASCII, чтобы гарантировать, что QString использует правильную кодировку при создании строки.   -  person RedX    schedule 29.06.2011
comment
@RedX: очевидно, что строка закодирована как UTF-8, но отображается побайтно.   -  person Kerrek SB    schedule 29.06.2011


Ответы (2)


Попробуй позвонить

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

сразу после создания объекта QApplication. QTextCodec::setCodecForTr требуется только в том случае, если вы используете tr().

РЕДАКТИРОВАТЬ: это работает только для Qt старше версии 5. Более новые версии Qt ожидают, что исходные файлы будут преобразованы в UTF-8.

person Raiv    schedule 29.06.2011
comment
Спасибо, это работает как шарм. Пожалуйста, добавьте, что вам нужно установить QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));, если кто-то использует tr(), иначе это не сработает. Тогда я с радостью приму ваш ответ. - person atamanroman; 29.06.2011
comment
Чтобы QByteArray::fromPercentEncoding() и QByteArray::fromBase64() работали с закодированными символами, отличными от ASCII, мне пришлось сначала вызвать QTextCodec::setCodecForCStrings() и QTextCodec::setCodecForLocale(). Для переменной среды LANG в этой системе было задано значение en_US.UTF-8. - person maxschlepzig; 09.03.2013

У меня была аналогичная проблема, и я решил использовать только 7-битные символы ASCII в моих исходных файлах и установить QTranslator, который создает умляуты.

Поскольку приложение все равно необходимо переводить на другие языки, это кажется хорошим способом избежать проблем с кодированием.

person arne    schedule 30.06.2011