問題タブ [wchar-t]
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 - ヌルバイト区切りのUNICODE C文字列
まず、これは次の複製ではありません: Turn a C string with NULL bytes into a char arraychar *
. が Unicode の場合、指定された答えは機能しないためです。
問題は、ASCII char * の代わりに UTF-8 でエンコードされた char * を使用しようとしており、各文字の長さが異なるため、これが機能しないことだと思います。
Unicode 文字列で機能する同様のソリューションを持っている人はいますか?
私はこれに4時間以上頭をぶつけています。Cは私に同意しません。
編集:問題は、char * が ASCII ではなく UTF-8 になっていることだと思います。
c++ - utf8 と utf16 の変換
たとえば、L"hao123--我的上网主页" のような wchar_t 文字列があります。これを utf8 に変換できます。
エンコーディングすると、出力文字列は「hao123锛嶏紞鎴戠殑涓婄綉涓婚〉」となりますが、最後にこれを書かなければなりません
文字列をプレーンテキストファイルに変換します。その形式は utf16 (他の人から知っています)、「hao123\uFF0D\uFF0D\u6211\u7684\u4E0A\u7F51\u4E3B\u9875」です。
C++ std 文字列で保存してからファイルに書き込む必要があるため、どうすれば変換できますか
"hao123锛嶏紞鎴戠殑涓婄綉涓婚〉" から "hao123\uFF0D\uFF0D\u6211\u7684\u4E0A\u7F51\u4E3B\u9875" へ char または C++ std 文字列 ?
誰でもヒントを教えてもらえますか?
前もって感謝します!
c++ - C++ で `wchar_t*` の長さを取得する
wchar_t*
C ++で型の変数の長さを調べるにはどうすればよいですか?
以下のコード例:
dimObjPrefix
含まれる文字数を知りたい
c - C の long を char* に変換する最も簡単な方法は何ですか?
Cでそれを行うクリーンな方法は何ですか?
私がこれまでに思いついた解決策はすべてかなり醜く、特に allocate_properly_size_whar_t は double float base math を使用しています。
c++ - Visual Studio 2005 での TCHAR を使用した C++ テンプレート関数の特殊化
テンプレート化された operator<< 関数を使用するロギング クラスを作成しています。ログ メッセージを書き込む前にワイドからナローへの変換を行えるように、テンプレート関数をワイド文字列に特化しています。TCHAR を正しく動作させることができません。特殊化を使用していません。アイデア?
関連するコードは次のとおりです。
そしてソースファイル
ここで、次のテスト プログラムを使用してこれらの機能を実行します。
上記のテストを実行すると、次のことがわかります。
残念ながら、それは正しくありません。変換できるように、最後のものを「TCHAR」にしたいと思います。Visual Studio のデバッガーによると、テスト 5 で呼び出されている関数にステップ インすると、型は wchar_t*& ですが、適切な特殊化を呼び出していません。アイデア?
関係があるかどうかはわかりませんが、これは Windows CE 5.0 デバイス上にあります。
string - C++/CLI で String^ の内部配列へのポインターを取得することは可能ですか?
目標は、必要なときに文字列データをコピーしないようにすることconst wchar_t*
です。
答えはイエスのようですが、関数にPtrToStringChars
は独自の MSDN エントリがありません (KB とブログでトリックとしてのみ言及されています)。疑問に思ったので、皆さんに確認したいと思います。その機能を使用しても安全ですか?
c++ - char配列をwchar_t配列に変換する方法は?
cmd
では使えません
char
では、配列を配列に変換する方法はwchar_t
?
c - swprintfは、8ビット範囲外の文字をチョークします
これはOSXで発生しますが、UNIX-yOSには当てはまると思います。私はこのように見える2つの文字列を持っています:
デバッガーでは、test1は「D」のように見え、test2は「D」のように見えます(カーリーアポストロフィ付き)。次に、このコードを呼び出します。
最初のswprintf呼び出しは正常に機能します。2番目のものは-1を返します(そしてバッファーは変更されません)。
問題はロケールに関係していると思いますが、グーグルで調べても何も役に立ちませんでした。これは、私が見ている問題を再現する最も簡単な方法です。私が本当に興味を持っているのはvswprintf()ですが、それは密接に関連していると思います。
swprintfが8ビット範囲外のUnicode文字でチョークするのはなぜですか?とにかくこれを回避する方法はありますか?
c++ - wchar_t** を char** に変換するには?
私は argv を wchar_t** (以下を参照) として取得します。これは、Unicode を扱う必要があるためですが、それを char ** に変換する必要があります。どうやってやるの?
c++ - 従来のTCHARコードとのインターフェースに適したスタイル
TCHARを広範囲に使用する他の誰かのコードを変更しています。コードでstd::wstringを使用する方が良い形式ですか?wstringは、widecharプラットフォームのTStringと同等である必要があるため、問題は発生しません。理論的根拠は、TCHARをサポートするよりも生のwstringを使用する方が簡単です...たとえば、boost:wformatを使用することです。
次のメンテナにとって、どちらのスタイルがより明確になりますか?文字列の複雑さを理解しようとして数時間を無駄にしました。wstringを使用するだけで、理解する必要のあるものの半分が削減されるようです。
...唯一の違いはアロケータです。
プログラムがWindow9xマシンに到達するというまれなケースでは、UTF-16文字列を8ビット文字に変換できるAPIレイヤーがまだあります。新しいコード開発にTCHARを使用しても意味がありません。 ソース