>  기사  >  백엔드 개발  >  Windows에서 UTF-8 문자열을 `std::cout`으로 올바르게 출력하는 방법은 무엇입니까?

Windows에서 UTF-8 문자열을 `std::cout`으로 올바르게 출력하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 07:36:01338검색

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

Windows의 C에서 UTF-8 문자열 처리

문자열을 UTF-8로 인코딩하는 것은 크로스 플랫폼 애플리케이션에 널리 사용됩니다. 그러나 Windows에서 UTF-8 문자열을 std::cout으로 출력하는 것은 독특한 문제를 야기합니다.

Windows의 기본 동작은 std::cout이 비유니코드 형식의 문자열을 예상하는 것입니다. UTF-8 문자열이 표시되면 손상된 문자가 표시됩니다.

이 문제를 해결하려면 두 가지 주요 단계가 있습니다.

  1. 콘솔 코드 페이지를 UTF-8로 설정 : SetConsoleOutputCP 함수를 사용하여 들어오는 바이트 스트림이 UTF-8로 인코딩되었음을 콘솔에 알립니다.
  2. 스트림 버퍼링 활성화: Visual에서 std::basic_filebuf의 기본 동작을 비활성화합니다. UTF-8 바이트 시퀀스를 분해하여 개별 바이트로 전달하는 Studio. 이 문제를 극복하기 위해 setvbuf는 스트림 버퍼링을 활성화하여 전체 문자열이 전체적으로 전달되도록 합니다.

다음은 이러한 솔루션을 통합하는 수정된 코드 조각입니다.

<code class="cpp">#include <string>
#include <iostream>
#include <Windows.h>
#include <cstdio>

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 << test << std::endl;

    return 0;
}</code>

추가로 이 단계에서는 Windows 콘솔의 래스터 글꼴이 ASCII가 아닌 유니코드 문자를 올바르게 표시하지 못할 수 있다는 점에 유의하세요. 적절한 렌더링을 활성화하려면 이제 Windows 10 이상 버전의 기본값인 트루타입 글꼴로 전환하는 것이 좋습니다.

위 내용은 Windows에서 UTF-8 문자열을 `std::cout`으로 올바르게 출력하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.