Depende de la codificación de su código fuente.
Tiendo a pensar que su archivo ya está codificado en UTF-8, el carácter ü está codificado como C3 BC.
Está llamando al constructor QString::QString (const char * str)
que, de acuerdo con http://doc.qt.io/qt-4.8/qstring.html#QString-8, convierte la cadena en unicode utilizando el método QString :: fromAscii() que considera por defecto la entrada como contenido Latin1.
Como C3 y BC son ambos válidos en latín 1, representando respectivamente & Atilde; y & frac14; convertirlos a UTF-8 dará lugar a los siguientes caracteres:
& Atilde; (C3) -> C3 83
& frac14; (BC) -> C2 BC
que conduce a la cadena que se obtiene: "4d c3 c2 83 aC 6c 6c 65 72"
Para acabar, es doble codificación UTF-8.
Hay varias opciones para resolver este problema:
1) Puede convertir el archivo de origen de América-1 con su editor de texto favorito.
2) Puede escaparse correctamente del carácter ü en \ xFC en la cadena litteral, por lo que la cadena no dependerá de la codificación del archivo.
3) se puede mantener el archivo y la cadena como UTF-8 y utilizar los datos QString str = QString::fromUtf8 ("Müller");
actualización: Este problema ya no es relevante en QT5. http://doc.qt.io/qt-5/qstring.html#QString-8 indica que el constructor ahora usa QString::fromUtf8()
internamente en lugar de QString::fromAscii()
. Entonces, siempre que la codificación UTF-8 se use consistentemente, se usará de forma predeterminada.
http://stackoverflow.com/questions/29485602/qt-convert-unicode-entites – trante