"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como gerar strings UTF-8 corretamente para `std::cout` no Windows?

Como gerar strings UTF-8 corretamente para `std::cout` no Windows?

Publicado em 2024-11-12
Navegar:688

How to Output UTF-8 Strings Correctly to `std::cout` on Windows?

Lidando com strings UTF-8 em C no Windows

A codificação de strings como UTF-8 é amplamente usada para aplicativos de plataforma cruzada. No entanto, a saída de strings UTF-8 para std::cout no Windows apresenta desafios únicos.

O comportamento padrão no Windows é std::cout esperar strings em formatos não Unicode. Quando apresentado com strings UTF-8, ele exibe caracteres corrompidos.

Para resolver esse problema, há duas etapas principais:

  1. Definir a página de código do console como UTF-8 : Usando a função SetConsoleOutputCP, informe ao console que o fluxo de bytes de entrada é codificado em UTF-8.
  2. Ativar buffer de fluxo: Desative o comportamento padrão de std::basic_filebuf no Visual Studio, que divide sequências de bytes UTF-8 e as transmite como bytes individuais. Para superar isso, setvbuf ativa o buffer de fluxo, garantindo que toda a string seja passada como um todo.

Aqui está um trecho de código revisado que incorpora estas soluções:

#include 
#include 
#include 
#include 

int main() {
    // Set console code page to UTF-8
    SetConsoleOutputCP(CP_UTF8);

    // Enable buffering to prevent byte-by-byte transmission
    setvbuf(stdout, nullptr, _IOFBF, 1000);

    // Output UTF-8 string
    std::string test = u8"Greek: αβγδ; German: Übergrößenträger";
    std::cout 

Além dessas etapas, observe que as fontes raster no console do Windows podem não exibir caracteres Unicode não ASCII corretamente. Para habilitar a renderização adequada, é recomendado mudar para uma fonte TrueType, que agora é o padrão no Windows 10 e versões posteriores.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3