1

私のプログラムでは、wstring必要なテキストを印刷していましたが、ランダムな暗号化が行われました(エンコード方式が異なるため)。たとえば、このコードブロックがあります。

wstring text;
text.append(L"Some text");

次に、directXを使用して画面にレンダリングします。以前使っていたのwchar_tですが、携帯性に問題があると聞いたので、に切り替えましたswtringwchar_tうまくいきましたが、私が言うことができることから英語の文字しか取れなかったようです(印刷されたものは入力された英語以外の文字を完全に無視します)、それは私が切り替えるまでは問題ありませんでしたwstring:中国語と韓国語が混ざったように見えるランダムな暗号しか入手できませんでした。そして興味深いことに、非Unicodeテキストの私のコンピューターロケールは中国語です。私が見たものに基づいて、漢字が正しくレンダリングされるのではないかと思ったので、試してみましたが、文字は正しく表示されますが、前面に正方形が表示されます(これはまだ一種の誤った表示です)。次に、エンコーディングが言語ロケールに依存する可能性があると推測したため、ロケールを英語(US)に切り替え(win8を使用)、再起動すると、ソースファイルの中国語のテスト文字がランダムなものになりました(ファイルは保存されません)すべてのテキストが英語であるため、Unicode形式で)英語の文字で試しましたが、運が悪かったため、表示はまったく同じように見え、ロケールとは関係ありません。しかし、なぜそれができないのか分かりません」

変換を行う必要がありますか、それともファイルを別のエンコード形式で保存する必要がありますか?問題は、デフォルトである英語の文字を正しく表示したかったことです。

4

4 に答える 4

1

問題を示すコードがない場合は、それに応じて一般的な回答を提供します。

英語の文字を表示しようとしていますが、漢字が表示されています。これは、8ビットのANSIテキストをUTF-16テキストを受信するAPIに渡すときに発生します。char*プログラム内でからにキャストする場所を探しますwchar_t*

于 2013-01-22T14:09:09.960 に答える
0

まず、テキストを保存しようとしているファイルの種類は何ですか?通常のtxtファイルはデフォルトでANSIに保存されます(Excelも同様です)。したがって、Unicode文字をANSIファイルに印刷しようとすると、ジャンク文字が印刷されます。この問題を克服する2つの方法は次のとおりです。

  1. UTF-8または16モードでファイルを開いてから、次のように記述してください。
  2. ファイルに書き込む前にUnicodeをANSIに変換します。Windowsを使用している場合、MSDNはUnicodeからANSIへの変換およびその逆を行うための特定のAPIを提供します。Linuxを使用している場合は、UnicodeからANSIへの変換にGoogleを使用します。そこにはたくさんの解決策があります。

お役に立てれば!!!

于 2013-01-22T14:13:10.777 に答える
0

バグが解決され、それはCASTINGの問題であることが判明しました(前述のようにレンダリングの問題ではありません)。swtringstreamバグのあるテキストは、 (私が言及するのを忘れた)を使用した内部変換プロセス中の中間製品であり、コードは次のとおりです。

wstringstream wss;
wstring text;
textToGenerate.append(L"some text");
wss << timer->getTime()
text.append(wss.str());

このプロセスの直後に、デバッガーはテキストをランダムなものの束として表示しますが、後で何らかの方法で変換して読みやすくします。ただし、DirectXを使用したレンダリング段階で問題が発生します。どういうわけかキャストをwchar_t*残しましたが、レンダリングが正しくありません。

年:

LPCWSTR lpcwstrText = (LPCWSTR)textToDraw->getText(); 

新着:

LPCWSTR lpcwstrText = (*textToDraw->getText()).c_str();

それを変えることで問題は解決します。

だから、これは悪いキャストが原因です。何人かの親切な人々が私の声明に訂正を提供したので。

于 2013-01-22T14:43:12.490 に答える
0

std::wstringロケール/国際化のサポートはまったくありません。これは、のシーケンスを格納するための単なるコンテナですwchar_t
の問題wchar_tは、そのエンコーディングが指定されていないことです。Unicode UTF-16、Unicode UTF-32、Shift-JIS、またはまったく異なるものである可能性があります。プログラム内から見分ける方法はありません。

ソースコードのエンコーディングが、プログラムが実行されるロケールで使用されるエンコーディングと同じであることを確認すると、動作する可能性が最も高くなります。
ただし、サードパーティのライブラリ(DirectXなど)を使用すると、それらのライブラリが期待およびサポートするエンコーディングに制限が生じる可能性があるため、追加の制約が課せられる可能性があります。

于 2013-01-22T14:46:22.077 に答える