2012-01-27 7 views
4

ANSIバージョンのカプセル化されたウィンドウANSI apisのインターフェイスのみを持つdllライブラリを使用してテキストを描画しようとしましたが、utf-8を使用して文字列データを格納する必要があります。 MultiByte/WideChar関数を使用して文字列を変換したくないので、アプリケーションでCP_ACPを変更してANSI apisに文字列データを入力できるようにします。ありがとう。アプリケーションのウィンドウANSI apisのCP_ACP(0)を変更するにはどうすればよいですか?

ps:システムのデフォルトコードページを変更しないでください。

+0

これに少なくとも言語タグを追加することをおすすめします。 Frameworkタグも便利です。 –

+0

ありがとう、私は追加しました。 – legendlee

+0

言語はありません。 C++? –

答えて

5

CP_ACPは、システムのAnsiコードページを表します。プロセス単位またはスレッド単位で変更することはできません。これはシステム全体の設定です。 DLLが実際に内部でCP_ACPに依存している場合は、DLLと対話するたびに/からUTF-8に変換するしかありません。

1

「CP_ACPの変更方法」 - "私はシステムのデフォルトのコードページを変更したくない。"

まあ、選択する必要があります。 CP_ACPシステムのデフォルトのコードページです。

+0

ありがとうございます。単一のプロセスのコードページを変更する蟻の方法はありますか? – legendlee

+1

@legendlee:いいえ、ありません。 'SetThreadLocale()'と 'SetThreadUILanguaage()'がありますが、それらはコードページではなく言語IDで動作します。 UTF-8は言語ではなく、Unicodeエンコーディングです。 –

1

UTF8はコードページではなく、コードページはANSI関数にのみ意味があるため、あなたが求めていることはできません。

文字列をUTF8として保存する場合は、MultiByteToWideChar()を使用してアプリケーションのANSIからユニコード(ワイド文字)に変換し、次にUTF8に変換するためにWideCharToMultiByte()を使用する必要があります。

また、ユニコード/ワイド文字列を内部的に使用するようにアプリを更新し、必要に応じて変換することもできます。

+4

UTF-8自体はコードページではありませんが、Microsoftは 'MultiByteToWideChar()'および 'WideCharToMultiByte()'関数での使用のためにUTF-8用のコードページを持っています - '65001' - UTF-7用のコードページUTF-16も同様です)。 –

+5

それはSetConsoleCP()でも同様に動作します。コードページのようなクォックは、コードページです。 –

関連する問題