"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++11을 사용하여 Windows에서 유니코드 UTF-8 파일을 Wstring으로 읽는 방법은 무엇입니까?

C++11을 사용하여 Windows에서 유니코드 UTF-8 파일을 Wstring으로 읽는 방법은 무엇입니까?

2024년 12월 21일에 게시됨
검색:709

How to Read Unicode UTF-8 Files into Wstrings in Windows with C  11?

Windows에서 유니코드 UTF-8 파일을 WString으로 읽기

Windows 프로그래밍 영역에서 파일에서 유니코드(UTF-8) 데이터를 WString으로 검색하는 작업은 넓은 문자열(wstring)은 C 11 표준에서 제공하는 다양한 기능을 통해 수행할 수 있습니다.

std::codecvt_utf8 패싯

이 솔루션의 핵심은 std::codecvt_utf8 패싯을 활용하는 것입니다. 이 패싯은 UTF-8로 인코딩된 바이트 문자열과 UCS2 또는 UCS4 표현을 사용하는 문자열 사이의 브리지 역할을 합니다. 이는 텍스트 및 바이너리 형식을 모두 포함하는 UTF-8 파일을 읽고 쓸 수 있는 열쇠를 보유하고 있습니다.

std::locale을 사용하여 지역화된 환경 구축

패싯의 힘을 활용하려면, 로캘 개체는 일반적으로 인스턴스화됩니다. 이 개체는 문화별 정보를 특정 지역화된 환경을 공동으로 정의하는 여러 측면으로 캡슐화합니다. 일단 획득하면 스트림 버퍼에 이 로케일이 포함될 수 있습니다.

Codecvt_utf8을 사용하여 UTF-8 파일 읽기

세심하게 제작된 예를 통해 이 접근 방식의 실제 적용을 보여줍니다.

#include 
#include 
#include 

std::wstring readFile(const char* filename)
{
    std::wifstream wif(filename);
    wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8));
    std::wstringstream wss;
    wss 

이 함수는 지정된 UTF-8 파일을 정상적으로 열고 해당 내용을 wstring으로 읽어온 다음 결과 문자열을 반환합니다.

대체 접근 방식: 전역 C 로캘 설정

또 다른 실행 가능한 옵션은 문자열 스트림을 사용하기 전에 전역 C 로케일을 설정하는 것입니다. 이 명령을 사용하면 std::locale 기본 생성자의 모든 후속 호출에서 전역 C 로케일의 복사본이 생성되므로 명시적인 스트림 버퍼 삽입이 필요하지 않습니다.

std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8));

이 수정을 적용하면 UTF-8 파일에서 wstring을 쉽게 읽을 수 있습니다.

std::wstring wstr = readFile("a.txt");

결론

앞서 언급한 기술은 강력하고 효율적인 처리 수단을 제공합니다. Windows 환경의 유니코드(UTF-8) 파일을 사용하여 개발자가 와이드 문자열을 효과적으로 조작하고 처리할 수 있습니다.

최신 튜토리얼 더>

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

Copyright© 2022 湘ICP备2022001581号-3