次の方法で共有


コンソール アプリケーションの問題

8 ビット コンソール関数は、OEM コード ページを使用します。 その他のすべての関数では、既定では ANSI コード ページが使用されます。 つまり、コンソール関数によって返される文字列は、その他の関数によって正しく処理されない可能性があり、その逆も同様です。 たとえば、FindFirstFileA が特定の拡張 ANSI 文字を含む文字列を返す場合、WriteConsoleA は文字列を正しく表示しません。

コンソール アプリケーションに最適な長期的なソリューションは、Unicode を使用することです。 コンソールは、UTF-8 コード ページ用に SetConsoleCPSetConsoleOutputCP65001 (CP_UTF8 定数) 使用した後、API の W バリアントの UTF-16 エンコードまたは API の A バリアントの UTF-8 エンコードを受け入れます。

そのソリューションを禁止するには、コンソール アプリケーションで SetFileApisToOEM 関数を使用する必要があります。 この関数は、関連するファイル関数を変更して、ANSI 文字セット文字列ではなく OEM 文字セット文字列を生成します。

ファイル関数を次に示します。

コマンド ラインを処理する場合、コンソール アプリケーションは Unicode 形式でコマンド ラインを取得し、関連する文字から OEM への関数を使用して OEM 形式に変換する必要があります。 また、argv では ANSI 文字セットが使用されていることにも注意してください。