2016-07-13 18 views
-3

でスマイリー私は、文字列からのようUTF-16絵文字 "OPEN MOUTH WITH 笑顔" を示して助けてください "\ uD83D \ uDE03" のQtで(多分それを表示するためにqDebug()またはQLabelを使用)。表示UTF-16のQt

QString a = "\\uD83D\\uDE03"; 

は私qDebugにそれを印刷したい、と私は期待される結果は次のとおりです。

は私が持っています。私はこれをする方法を知らない。

+1

コードを表示してください。何を試しましたか? – demonplus

+0

私は 'QString a =" \\ uD83D \\ uDE03 ";'それを私のqDebugに印刷したいと思い、私が期待した結果があります。私はこれをする方法を知らない。 –

答えて

4

見コメント(私は疑問にそれを移動した)後:

私は= "\ uD83D \ uDE03を" QStringのしています。私はそれを私のqDebugに印刷したいと思っていました。私はこれをする方法を知らない。

私は問題が何であるかを見ています。文字列のエンコーディングと異なるタイプの文字列エンコーディング間の変換。

この種のリテラル「\ uD83D \ uDE03」(無効なままにしておきます)を使用する場合は、1バイトを文字として使用できるエンコーディングを使用する必要があります。 たとえば、UTF-8などです。その後、内部でUTF-16を使用するQStringに変換する必要があります。 Qtの4において

QString smile = QString::fromUTF8("\xF0\x9F\x98\x83"); 

それはもう少し複雑である:(Qtの5)それを修正する

QTextCodec *codec = QTextCodec::codecForName("UTF-8"); 
QString smile = QTextDecoder(codec).toUnicode("\xF0\x9F\x98\x83", 4); 

別のアプローチは、QCharを使用し、それはQt4を用nicely documented(作品とQt5)、ここではドキュメントの例の微調整です:

static const QChar unicodeSmile[] = { 0xD83D, 0xDE03, 0 }; 
QString smile = QString::fromRawData(unicodeSmile); 

wcharでも、これはプラットフォームに依存しているので、QtがQChar *に近づいた理由がもっと問題になるかもしれません。

+0

ありがとうございます。 –

関連する問題