2011-01-31 14 views
12

これは明白な質問のように聞こえるかもしれませんが、UTF-8がどのようにコード化されているか、toUtf8関数がどのように機能するかについては何か不足しています。QString :: toUtf8とは何ですか?

は、その後、私は出力

"Müller" "4dc383c2bc6c6c6572" 

を取得しかし、私はletter ü c3bcなくc383c2bcとしてエンコードされている必要がありますアイデアを得たのは非常に簡単なプログラムで

QString str("Müller"); 
qDebug() << str << str.toUtf8().toHex(); 

を見てみましょう

おかげで、あなたのコードを実行 ヨハン

+0

http://stackoverflow.com/questions/29485602/qt-convert-unicode-entites – trante

答えて

17

ソースコードのエンコーディングによって異なります。

ファイルがすでにUTF-8でエンコードされていると思われる傾向があります。文字はC3 BCとしてエンコードされています。

http://doc.qt.io/qt-4.8/qstring.html#QString-8に従って、デフォルトでは入力をLatin1の内容とみなすQString :: fromAscii()メソッドを使用して、文字列をユニコードに変換するQString::QString (const char * str)コンストラクタを呼び出しています。

C3とBCは両方ともLatin 1で有効であるため、それぞれ&Atilde; &frac14; UTF-8に変換すると、次の文字が表示されます。

&ailde; (C3)→C3 83

&frac14; (BC) - > C2 BCあなたが得る文字列につながる

: "4D C3 83 C2 BC 6cと6cの65 72"

が、それは二重のUTF-8エンコーディングだ、物事をまとめるために。

1)あなたは、あなたの好みのテキストエディタを使用してラテン-1にソースファイルを変換することができます。

は、この問題を解決するには、いくつかのオプションがあります。

2)文字列がファイルのエンコーディングに依存しないように、ü文字を\ xFCに適切にエスケープすることができます。

3)あなたはUTF-8データとしてファイルや文字列を保持し、使用することができます更新QString str = QString::fromUtf8 ("Müller");

:この問題はQT5にもはや関連しています。 http://doc.qt.io/qt-5/qstring.html#QString-8は、コンストラクタがの代わりにQString::fromUtf8()を内部的に使用するようになりました。したがって、UTF-8エンコーディングが一貫して使用されている限り、デフォルトで使用されます。

関連する問題