"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Windows 콘솔에서 독일어 문자로 UTF-8 문자를 올바르게 인쇄하는 방법은 무엇입니까?

Windows 콘솔에서 독일어 문자로 UTF-8 문자를 올바르게 인쇄하는 방법은 무엇입니까?

2024-11-09에 게시됨
검색:116

How to Print UTF-8 Character Correctly in Windows Console with German Characters?

Windows 콘솔에서 적절한 UTF-8 문자 인쇄

이 문서는 Windows 콘솔에서 UTF-8 문자를 인쇄하려고 할 때 직면하는 문제를 해결하는 것을 목표로 합니다. Windows 콘솔.

문제 설명

사용자가 특정 코드 조각을 사용하여 독일어 문자를 표시하는 데 어려움을 겪었습니다.

#include 
#include 

int main() {
  SetConsoleOutputCP(CP_UTF8);
  // German characters not appearing
  char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
  int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
  wchar_t *unicode_text = new wchar_t[len];
  MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
  wprintf(L"%s", unicode_text);
}

출력 코드 페이지를 UTF-8로 설정했음에도 불구하고 독일어 문자가 올바르게 인쇄되지 않습니다.

해결책

Windows 콘솔에는 여러 가지 사용 가능한 방법이 있습니다:

  1. WriteConsoleW 직접 사용: WriteConsoleW를 사용하여 명시적으로 콘솔 API와 통신합니다. 이 접근 방식을 사용하면 데이터가 콘솔에 올바르게 기록됩니다. 그러나 콘솔과 콘솔이 아닌 출력 상황을 구별해야 합니다.
  2. 출력 모드 설정: _setmode를 통해 표준 출력 파일 설명자의 출력 모드를 "_O_U16TEXT" 또는 "_O_U8TEXT"로 설정합니다. 이를 통해 와이드 문자 출력 기능을 통해 유니코드 데이터를 콘솔에 올바르게 출력할 수 있습니다. 이 방법을 사용하려면 선택한 스트림에서 와이드 문자 기능만 사용해야 합니다.
  3. CP_UTF8 인코딩: 콘솔 출력 코드 페이지를 CP_UTF8로 설정하고 적절한 명령을 사용하여 UTF-8 텍스트를 콘솔에 직접 인쇄합니다. 낮은 수준의 기능 또는 사용자 정의 ostream 구현.

문제 해결

세 ​​번째 방법으로 잘못된 출력의 경우:

putc('\302'); putc('\260'); // doesn't work with CP_UTF8

puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8 

이는 콘솔 API가 CP_UTF8을 사용할 때 별도의 호출로 전달된 데이터를 잘못된 인코딩으로 해석하기 때문입니다.

이 문제를 해결하려면 생성을 고려하세요. 멀티바이트 문자 변환을 정확하게 처리하고 쓰기 간 변환 상태를 유지하는 streambuf 하위 클래스입니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3