2016-10-12 17 views
0

私は成功を収め、QString::fromUtf8("Precio (\u20AC/k)");のように、QString::fromUtf8に渡すために、\uエンコードされた配列と文字列リテラルを使用して、しかし、少し私の心を苦労し、cppreferenceを読んでいましたその他の情報源では、\u20ACのシーケンスがどのようにバイナリで翻訳されているのか明確ではありません。のQString :: fromUtf8(STR)と uのエンコードされた文字列

つまり、\u20ACの代わりにQString::fromUtf8の受信とは何ですか? 20ACコードポイントのUTF-8表現?そのUTF-16表現ですか?または何?

私が読んだソースの大部分は、それがUTF-16表現に変換されていると言います。つまり、その文字列をfromUtf8に渡すときに間違っていますが、常にうまくいきました。

私は正しいことをしているのですか?

答えて

1

接頭辞のない文字列リテラル"..."のエンコードは、実装定義です。 Windows以外の多くのコンパイラでは、デフォルトではUTF-8に設定されていますが、場合によっては変更されることもあります。 GCCの場合、このスイッチは-fexec-charsetdocs)です。

何のUnicodeエスケープシーケンスが存在しない場合でも、実行文字セットの文字列リテラルの独立のUTF-8エンコーディング、u8"..."cppreference

+0

を導入C++ 11を取得するには?だから、 '' hello "'のような純粋なASCIIの修正されていないリテラル文字列は、UTF-16でエンコードできますか? –

+1

@ Peregring-lk no。UTF-16は、実行文字セットのマルチバイトエンコーディングとして使用できません。 wchar_tが16ビットの変わったコンパイラ(Visual Studio)は、それを 'L"のエンコーディングとして使用するかもしれませんhello "' – Cubbi

+0

いいえ、固定されていない文字列リテラルのエンコーディングは、 、 ではない?文字列に実行文字セットのみが含まれている場合はASCIIエンコード(= UTF-8、= ISO-8859-1など)ですが、他の文字が含まれている場合、これらの特定の文字列のエンコードは実装定義です。ではない? –

関連する問題