2009-06-29 20 views
3

したがって、SetThreadLocaleを使用してスレッドコードページをUTF8に設定します。これまでは、CT2A(szBUF、CP_UTF8)のようなatl文字列変換マクロの2番目のパラメータを使用していました。しかし、私はSetThreadLocale()を使用して最初にスレッドコードページを設定し、変換マクロの2番目のパラメータを再度使用する必要がないようにしたい。SetThreadLocaleとUTF8

どうすればよいですか? SetThreadLocaleは、LC_IDだけのCP_UTF8のようなコードページパラメータをとることはありません。 SetThreadLocaleにはどのパラメータを設定する必要がありますか?

私は心に留めておきます。私が得る文字列は、日本語、韓国語、英語などです。これまでは、変換マクロの2番目のパラメータとしてCP_UTF8を指定するときに、この文字列の混合に問題はありません。 「なぜ、第2のパラメータを使い続けるのはなぜか」と尋ねるかもしれません。なぜなら、これは、コードで作業しているチームメンバが簡単に忘れる可能性があるからです。変換マクロのデフォルトの1パラメータバージョンを使用するだけで正常に動作するのはいいでしょう。

答えて

5

SetThreadLocaleは言語識別子が必要ですが、UTF-8は言語識別子ではありません。Unicodeエンコーディングです。土地IDの目的の1つは、128〜255の範囲のANSIテキストの処理方法をシステムに伝えることです。実際の言語が与えられると、その文字を扱うときにそのコードページが使用されます。 UTF-8、OTOHは、Unicodeテキストの圧縮表現です。 UTF-8テキストを作成するには、入力をUnicodeにする必要があります。 ANSIテキストを指定すると、上部範囲の文字をどのように変換するか分かりません。これは "手動で"行われたときに、ANSIをUTF-8に変換するために、指定されたコードページでMultiByteToWideCharを使用しなければならず、結果として得られるUnicode文字列をUTF-8に変換できます。

今、あなたの質問に戻る - 私は別の方法をとるだろう。追加のコードページのparamでそれほどバグがある場合は、それを隠す(またはCT2Aクラスを継承して2番目のパラメータを修正する)マクロを作成します。

+0

この説明は意味があります。うん、私はちょうど2番目のパラメータを使用するつもりだと思う。スレッドのコードページを一度設定するのは簡単な方法ではないようです。 –