問題タブ [wstring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - .c_str() 奇妙ですか? 韻も理由もなくデータが変更されますか?
私はこの単純な機能を持っています:
その関数の 2 行目に、正しい wchar_t* があります。しかし、私が戻ってくると、データはガベージデータに切り替わります。間に機能はありません。何が得られる?!
string - どのワイド文字列構造を使用しますか? CString と wstring
std::string と std::wstring を使用する C++ の MFC アプリケーションがあり、一方から他方へ頻繁にキャストされ、その他の多くのナンセンスがあります。すべてを 1 つの形式に標準化する必要があるため、CString と std::wstring のどちらを使用するべきか迷っていました。
アプリケーションでは、文字列テーブルから文字列を生成し、定数 tchar または wchar_t ポインターを必要とする多数の Windows 呼び出しを操作し、コントロールを編集し、BSTR を必要とする COM オブジェクトの API を操作する必要があります。
文字列のベクトルもありますが、CStrings のベクトルに問題はありますか?
どちらの方がよいですか?それぞれの長所と短所は何ですか?
例
BSTR から wstring へ
wstring から BSTR
文字列リソースから wstring へ
GetProfileString() は CString を返します。
整数から文字列へのフォーマット:
c++ - C ++でUnicode文字列を処理するための最適なマルチプラットフォームの方法は何ですか?
std::string
StackOverflowには、対または類似の質問がすでにいくつかあることは知っていstd::wstring
ますが、完全なソリューションを提案したものはありません。
良い答えを得るために、私は要件を定義する必要があります:
- マルチプラットフォームの使用法、Windows、OS X、Linuxで動作する必要があります
- UTF-8またはOSAPIで必要とされる他のタイプなど、プラットフォーム固有のUnicode文字列との間で変換するための最小限の労力。備考:サポートされているすべてのオペレーティングシステムでUnicode互換関数のみを使用することを期待しているため、コードページ変換のサポートは必要ありません。
CFStringRef
wchar_t *
char*
- 外部ライブラリが必要な場合、これはオープンソースであり、BSDのような非常にリベラルなライセンスの下にある必要がありますが、LGPLではありません。
- printf形式の構文などを使用できます。
- 文字列の割り当て/割り当て解除の簡単な方法
- Unicode文字列はアプリケーションUIにのみ使用されると想定しているため、パフォーマンスはそれほど重要ではありません。
- いくつかの例をいただければ幸いです
私は本当に、答えごとに1つの提案された解決策だけを感謝します。これを行うことによって、人々は彼らの好みの選択肢に投票することができます。複数の選択肢がある場合は、別の回答を追加してください。
あなたのために働いた何かを示してください。
関連する質問:
c++ - CStringをstd::wstringに変換します
CString
に変換するにはどうすればよいstd::wstring
ですか?
c++ - OS X での文字列から wstring への変換
C++ 文字列を wstring に変換しようとしています。私が探しているアクセントを扱っているように見える次のコードを見つけました。
残念ながら、 C または POSIX 以外のloc値を指定すると、コードがクラッシュします。この問題はすでに議論されていますが、うまくいきませんでした。こちら: std::locale breakage on MacOS 10.6 with LANG=en_US.UTF-8、こちらまたはこちら。
これを行うための回避策または他の方法はありますか?
string - 文字列から wstring への変換により、ú のエンコーディングが失われる
である変数filepath
にはstring
値が含まれますMúsica
。次のコードがあります。
fp
値が含まれますM?sica
。ú 文字のエンコーディングを失わずに に変換filepath
するにはどうすればよいですか?fp
c++ - C++ の std::wstring、UTF-16、UTF-8、および Windows GUI での文字列の表示について混乱しています
私は、「常に std::wstring を使用する」と言われている Windows 用の英語のみの C++ プログラムに取り組んでいますが、チームの誰もそれ以上のことを本当に理解していないようです。
「 std::wstring VS std::string 」というタイトルの質問をすでに読みました。非常に役に立ちましたが、そのすべての情報を問題に適用する方法がまだよくわかりません。
私が取り組んでいるプログラムは、Windows GUI にデータを表示します。そのデータは XML として永続化されます。レポーティングのために、XSLT を使用してその XML を HTML または XSL:FO に変換することがよくあります。
私が読んだ内容に基づく私の感覚は、HTML は UTF-8 としてエンコードする必要があるということです。私は GUI 開発についてほとんど知りませんが、少し読んだだけでは、GUI はすべて UTF-16 でエンコードされた文字列に基づいていることがわかります。
私はこれが私をどこに残すかを理解しようとしています。永続化されたデータはすべて UTF-8 でエンコードされた XML にする必要があると判断したとします。これは、永続化されたデータを UI コンポーネントに表示するには、何らかの明示的な UTF-8 から UTF-16 へのトランスコーディング プロセスを実際に実行する必要があるということですか?
私の説明は明確化を使用できると思われるので、質問があればそれを提供しようとします.
c++ - C++ 文字列 (または char*) を wstring (または wchar_t*) に変換します
s の内容を ws に割り当てるにはどうすればよいですか?
Google を検索し、いくつかの手法を使用しましたが、正確なコンテンツを割り当てることはできません。内容が歪んでいます。
c++ - C ++:両方のプログラムで幅の広い文字列を使用すると、パイプを介してデータを取得できない
Mac OS X SnowLeopardのC++で次のコードを使用して、パイプを介して外部プログラムの出力を取得しようとしています。
ただし、データは印刷されません。外部プログラムがwcout
とwclog
に出力することに問題があるのではないかと思いますが、どう対処すればいいのかわかりません。私もとを使ってみましたwstring
がfgetws
、それも役に立ちませんでした。
boost :: iostreamsの使用について読みましたが、運がありませんでした。
実際の問題が何であるか、そしてそれをどのように解決するかについて誰かが手がかりを持っていますか?誰かが尋ねるかもしれませんが、wstring
私は中国語などを含む任意の言語のデータを扱っているので、外部プログラムとパイプから読み取るプログラムの両方を使用する必要があります。
手がかりを事前に感謝します!
c++ - Unicode ファイルで getline を使用する際の問題
更新: @Potatoswatter と @Jonathan Leffler のコメントに感謝します。かなり恥ずかしいことに、wstring の値が正しく表示されないデバッガー ツール ヒントに気付きましたが、それでもうまく機能せず、質問を更新しました。下:
文字列に読み込みたい小さなマルチバイトファイルがある場合、次のトリックを使用します-たとえばgetline
、区切り文字で使用します'\0'
これにより、改行を含むファイル全体が読み込まれます。
ただし、ワイド文字ファイルで同じことを実行しようとすると、機能しませんwstring
。最初の行までしか読み取れません。
たとえば、Unicode ファイルに CRLF で区切られた文字 A と B が含まれている場合、16 進数は次のようになります。
マルチバイトファイルで getline with '\0' がファイル全体を読み取るという事実に基づいて、getline( inf2, contents_wide, wchar_t(0) )
ユニコードファイル全体を読み取る必要があると信じていました。ただし、そうではありません。上記の例では、ワイド文字列に次の 2 つの wchar_ts が含まれます。FF FF
( wchar_t(0) を削除すると、期待どおりに最初の行に読み込まれます(つまりFE FF 00 41 00 0D 00
)
wchar_t(0) が wchar_t の区切りとして機能しないのはなぜ00 00
ですか?
ありがとうございました