コンソール アプリケーションの問題
8 ビット コンソール関数は、OEM コード ページを使用します。 その他のすべての関数では、既定では ANSI コード ページが使用されます。 つまり、コンソール関数によって返される文字列は、その他の関数によって正しく処理されない可能性があり、その逆も同様です。 たとえば、FindFirstFileA が特定の拡張 ANSI 文字を含む文字列を返す場合、WriteConsoleA は文字列を正しく表示しません。
コンソール アプリケーションに最適な長期的なソリューションは、Unicode を使用することです。 コンソールは、UTF-8 コード ページ用に SetConsoleCP と SetConsoleOutputCP を 65001
(CP_UTF8
定数) 使用した後、API の W バリアントの UTF-16 エンコードまたは API の A バリアントの UTF-8 エンコードを受け入れます。
そのソリューションを禁止するには、コンソール アプリケーションで SetFileApisToOEM 関数を使用する必要があります。 この関数は、関連するファイル関数を変更して、ANSI 文字セット文字列ではなく OEM 文字セット文字列を生成します。
ファイル関数を次に示します。
CopyFile
CreateDirectory
CreateFile
CreateProcess
DeleteFile
FindFirstFile
FindNextFile
GetCurrentDirectory
GetDiskFreeSpace
GetDriveType
コマンド ラインを処理する場合、コンソール アプリケーションは Unicode 形式でコマンド ラインを取得し、関連する文字から OEM への関数を使用して OEM 形式に変換する必要があります。 また、argv では ANSI 文字セットが使用されていることにも注意してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示