Это зависит от кодировки вашего исходного кода.
Я склонен думать, что ваш файл уже закодирован в UTF-8, символ ü кодируется как C3 BC.
ВыВы вызываете конструктор QString::QString ( const char * str )
, который в соответствии с http://doc.qt.io/qt-4.8/qstring.html#QString-8, преобразует вашу строку в Unicode, используя метод QString :: fromAscii (), который по умолчанию рассматривает ввод как содержимое Latin1.
как C3и BC оба действительны на латинице 1, обозначая соответственно Ã и ¼, преобразование их в UTF-8 приведет к следующим символам:
à (C3) -> C3 83
¼ (BC) -> C2 BC
, что приводит к получаемой строке: "4d c3 83 c2 bc 6c 6c 65 72"
Подводя итог, мы удваиваемКодировка UTF-8.
Существует несколько вариантов решения этой проблемы:
1) Вы можете конвертировать исходный файл в Latin-1, используя ваш любимый текстовый редактор.
2) Вы можете правильно экранировать символ ü в \ xFC в буквальной строке, чтобы строка не зависелаd в кодировке файла.
3) вы можете сохранить файл и строку как данные UTF-8 и использовать QString str = QString::fromUtf8 ("Müller");
Update : эта проблема больше не возникаетактуально в QT5.http://doc.qt.io/qt-5/qstring.html#QString-8 утверждает, что конструктор теперь использует QString::fromUtf8()
внутри вместо QString::fromAscii()
.Таким образом, пока кодировка UTF-8 используется последовательно, она будет использоваться по умолчанию.