# QtCreator Encoding-Probleme [solved]

## manuels

Hi,

ich hab mit QtCreator ein Programm erstellt und folgendes Encoding-Problem:

Die Strings, die ich in .cpp-Dateien eintippe, werden falsch dargestellt, die in den .ui-Formulardateien aber richtig.

Mit "falsch" meine ich, dass z.B. "ü" in der .cpp-Datei als "Ãś" im kompilierten Programm dargestellt wird.

Die .cpp-Datei ist aber UTF-8-enkodiert:

```
$ file MessageEditDialog.cpp 

MessageEditDialog.cpp: UTF-8 Unicode C program text
```

Genau so ist auch der Rest meines Systems eingestellt:

```
$ locale

LANG=de_DE.utf8

LANGUAGE=

LC_CTYPE="de_DE.utf8"

LC_NUMERIC="de_DE.utf8"

LC_TIME="de_DE.utf8"

LC_COLLATE="de_DE.utf8"

LC_MONETARY="de_DE.utf8"

LC_MESSAGES="de_DE.utf8"

LC_PAPER="de_DE.utf8"

LC_NAME="de_DE.utf8"

LC_ADDRESS="de_DE.utf8"

LC_TELEPHONE="de_DE.utf8"

LC_MEASUREMENT="de_DE.utf8"

LC_IDENTIFICATION="de_DE.utf8"

LC_ALL=
```

Auch in der Qt-Build-Umgebung ist LANG=de_DE.UTF-8 angegeben.

Selbst wenn ich "qmake && make && ./MeinProg" aus der Konsole aufrufe, treten diese Encoding-Probleme auf.

Ich versteh nicht, wieso aus der UTF-8-.cpp-Datei anscheinend eine ISO-Binary wird.

Weiß von euch jemand Rat?

Danke!

Manuel

EDIT: falls es wichtig ist: mein String ist in der .cpp-Datei von tr() umschlossen!

----------

## franzf

Nur um sicher zu gehen: Du hast in der creator-Config (Umgebung->Allgemein->Vorgabe-Encoding) schon UTF-8 stehen? Wie sieht es aus, wenn du die Datei mit vim öffnest?

----------

## intmain

Das Problem liegt nicht an QtCreator sondern daran, dass Qt per Default davon ausgeht, dass Strings Latin1-codiert sind.

Mit QTextCodec::setCodecForTr() kann man das ändern:

```

int main(int argc, char *argv[])

{

    QApplication app(argc, argv);

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

    // ...

}

```

In Qt 4.7 sollte es theoretisch auch funktionieren, wenn man CODECFORTR = UTF-8 in das .pro File schreibt, habe ich aber selbst noch nicht ausprobiert.

----------

## manuels

Ahh, der C++-Befehl klappt!

CODECFORTR = UTF-8 selbst nach "make clean && qmake && make" mit v4.7.0 nicht.

Egal, danke!

----------

## manuels

Sehe ich das richtig, dass man den Übersetzer für deutsche Standard-Buttons ("Anwenden", "Abbrechen", ...) auch selber "installieren" muss?

(Mit "installieren" meine ich, qApp.installTranslator(...) in sein Programm einfügen)

Ich mag zwar Qt, aber irgendwie machen sie es an manchen Stellen komplizierter als es sein müsste...

----------

## intmain

Ich musste bis jetzt auch immer die Standardübersetzungen selbst nachladen, ich gehe also davon aus, dass Qt das nicht automatisch macht.

Auch wenn CODECFORTR = UTF-8 alleine nicht ausreicht würde ich es auf jeden Fall im .pro beibehalten, sonst kann es unter Umständen sein, dass lupdate von einem falschen Encoding ausgeht, das würde dann bei Übersetzungen in andere Sprachen Probleme machen.

----------

