Compartilhar via


Problemas do aplicativo de console

As funções de console de 8 bits usam a página de código OEM. Todas as outras funções usam a página de código ANSI por padrão. Isso significa que as cadeias de caracteres retornadas pelas funções de console podem não ser processadas corretamente pelas outras funções e vice-versa. Por exemplo, se FindFirstFileA retornar uma cadeia de caracteres que contém determinados caracteres ANSI estendidos, WriteConsoleA não exibirá a cadeia de caracteres corretamente.

A melhor solução de longo prazo para um aplicativo de console é usar o Unicode. O console aceitará a codificação UTF-16 na variante W das APIs ou codificação UTF-8 na variante A das APIs depois de usar SetConsoleCP e SetConsoleOutputCP para 65001 (CP_UTF8 constante) para a página de código UTF-8.

Com exceção dessa solução, um aplicativo de console deve usar a função SetFileApisToOEM . Essa função altera as funções de arquivo relevantes para que elas produzam cadeias de caracteres de conjunto de caracteres OEM em vez de cadeias de caracteres ANSI.

A seguir estão as funções de arquivo:

GetFileAttributes
GetFullPathName
GetModuleFileName
GetModuleHandle
GetSystemDirectory
GetTempFileName
GetTempPath
GetVolumeInformation
GetWindowsDirectory
LoadLibrary

Ao lidar com linhas de comando, um aplicativo de console deve obter a linha de comando no formulário Unicode e convertê-la no formulário OEM, usando as funções de caractere para OEM relevantes. Observe, também, que o argv usa o conjunto de caracteres ANSI.