Sabemos que existe um aplicativo chamado AppLocale, que pode alterar a página de código de aplicativos não Unicode, para resolver problemas de exibição de texto.
Mas existe um programa cujopágina de código de exibição direitaé UTF-8, o que significaseu texto deve ser mostrado como UTF-8, mas em vez disso Windowsexibe-o como a página de código nativae torna o texto ilegível. Parece engraçado, porque existem quase todos os países e regiões, mas sem UTF-8. Eu acho que é um bug, porque os programadores podem usar o inglês e ignorar os testes de problemas de exibição de texto em idiomas diferentes do inglês. Não acho que o produtor vá consertar isso e eu quero consertar sozinho.
É possível definir a saída não Unicode como UTF-8 usando software como AppLocale? A saída não Unicode padrão é uma página de código nativa? Como posso definir a página de código nativa para UTF-8?
Responder1
Anteriormente não era possível porque
A Microsoft alegou que um código de idioma UTF-8 pode quebrar algumas funções (um possível exemplo é
_mbsrev
), pois elas foram escritas para assumir que codificações multibyte não usavam mais do que 2 bytes por caractere, portanto, até agora, páginas de código com mais bytes, como GB 18030 (cp54936) e Não foi possível definir UTF-8 como localidade.https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8
Contudo há um"Beta: Use Unicode UTF-8 para suporte a idiomas em todo o mundo"caixa de seleção desde a versão 17035 do Windows 10 Insider para definir a página de código de localidade como UTF-8
Veja também
- Alterando a página de código ansi e OEM no Windows
- Windows 10 Insider Preview Build 17035 oferece suporte a UTF-8 como ANSI
Dito isto, o suporte ainda apresenta erros neste momento
- Problema de congelamento no Windows 10 1803 ao usar UTF-8 como página de código padrão
- quando o suporte beta unicode no Windows 10 está ativado, os complementos não são instalados
- O suporte UTF-8 para conjuntos de caracteres de byte único é beta no Windows e provavelmente interrompe muitos aplicativos que não esperavam isso
- Falha na compilação com erro interno no MSVC
Atualizar:
A Microsoft também adicionou a capacidade de os programas usarem o código de idioma UTF-8 sem sequer definir o sinalizador UTF-8 beta acima. Você pode usar o/execution-charset:utf-8
ou/utf-8
opções ao compilar com MSVC ou definir a propriedade ActiveCodePage em appxmanifest
Você também pode usar a localidade UTF-8 em versões mais antigas do Windows vinculando-se ao tempo de execução C apropriado
A partir do Windows 10 build 17134 (atualização de abril de 2018), o Universal C Runtime dá suporte ao uso de uma página de código UTF-8. Isso significa que
char
as strings passadas para funções de tempo de execução C esperarão strings na codificação UTF-8. Para ativar o modo UTF-8, use "UTF-8" como página de código ao usarsetlocale
. Por exemplo,setlocale(LC_ALL, ".utf8")
usará a página de código ANSI (ACP) padrão atual do Windows para a localidade e UTF-8 para a página de código....
Para usar esse recurso em um sistema operacional anterior ao Windows 10, como o Windows 7, você deve usarimplantação local do aplicativoou vincule estaticamente usando a versão 17134 do Windows SDK ou posterior. Para sistemas operacionais Windows 10 anteriores a 17134, somente a vinculação estática é suportada.
Responder2
Pelo que li sobre a MicrosoftFerramenta AppLocale na Wikipedia, a ferramenta NÃO poderá alterar sua página de código para UTF-8.Funciona apenas com aplicativos não Unicode, mas UTF-8 faz parte do padrão Unicode.
Nos bastidores, o processamento Unicode de caracteres não-ASCII difere muito do não-Unicode, portanto, embora seja possível alternar entre páginas de código não-Unicode (isso é o que o AppLocale faz), NÃO é possível alterar entre páginas de código Unicode e não-Unicode. Unicode sem modificação da aplicação feita pelo seu produtor.
Responder3
Só para mencionar aqui: no Windows 10 17133 agora existe uma opção beta para usar UTF-8 para suporte mundial. Mas isso não ajuda com programas não-Unicode no momento, mas é colocado no pop-up onde posso alterar a localidade dos programas não-Unicode.
Então, talvez eles estejam trabalhando em algo para acabar com a necessidade de alterar a localidade de programas não-Unicode.