2011-01-03 6 views
3

私はUnicodeを使いたい、日本などの国で終わる可能性のあるプロジェクトに取り組んでいます...データレイヤーに文字列データを保持する基になる型にstd :: stringを使用したい理由についてはQt, MSVC, and /Zc:wchar_t- == I want to blow up the world)。問題は、このために使用する関数のペア(to/from)を完全には確信しておらず、ユーザーがQtレイヤーに入力できるものと100%互換性があることを確認することです。std :: stringとの変換に使用するQStringの関数のペアはどれですか?

to/fromStdStringを見ると、setCodecForCStringsを使用する必要があることがわかります。その関数のドキュメンテーションは、日本語のようなものではしたくないことを示しています。これは私が好きなセットです。可能であれば、これをどのように設定するのかを誰かが十分に知っていますか?

もう1つのオプションは、to/fromUTF8関数が動作しているかのように見えます。それらは2つのステップのアプローチを必要とするので、私は可能な限り他のものを好むでしょう。

私が見逃したことはありますか?

+2

あなたは実際にstd :: ** w **文字列を使用します。 –

+0

みんなで是非!少なくとも応答する前に質問を読んだり、気にしないでください!すべての弦楽器のことが既に議論されており、私はそれを心配している人のための直接リンクを提供しました。 –

+0

申し訳ありませんが、以前の質問を再投稿しています。それらのライブラリをコンパイルしようとしましたが、単純なテストアプリケーションを作成する際に問題が発生しましたか?あなたが望む文字型でstd :: basic_stringを使い、ライブラリコンパイルの問題を完全に回避することは可能でしょうか?あなたは実際にこれまでに試したことがありますか? – AJG85

答えて

2

ここでの説明は少し戸惑う(QString)。しかし、QTextCodecのドキュメントには何の問題もないようです。ただし、std :: stringの代わりにQByteArrayを返します。もちろん、QByteArraystd::stringに簡単に変換することができます。しかし、あなたはQStringのソースを見ればあなたはtoStdStringがまさにそれないことがわかります。今度は

inline std::string QString::toStdString() const 
{ const QByteArray asc = toAscii(); return std::string(asc.constData(), asc.length()); } 

toAsciiをコーデックがQTextCodec::setCodecForCStringに設定されているものを使用します。

日本のコーデックに関する警告は有効ですが、ご使用のOSが日本のコーデックを使用している場合は、問題はないでしょう。私はここで完全には分かりません。

しかし、この問題を回避することができます。あなたのコーデックをUTF-8として設定するだけで、toStdStringはすべてをUTF-8に変換する必要があります。実際に私は今すぐ自分のコードでそれを行うつもりです。 :)

+0

質問を読んでくれてありがとう!!コーデックをUTF-8に設定するのは、おそらく私が望むものです。 –

関連する問題