>  기사  >  백엔드 개발  >  Windows에서 UTF-8 콘텐츠를 Wstrings에 로드하는 방법은 무엇입니까?

Windows에서 UTF-8 콘텐츠를 Wstrings에 로드하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-06 21:35:03737검색

How to Load UTF-8 Content into Wstrings on Windows?

Windows에서 Wstring에 UTF-8 콘텐츠 로드

Windows 플랫폼에서 유니코드(UTF-8) 파일을 wstring으로 읽으려면 다음을 주의 깊게 처리해야 합니다. 텍스트 데이터의 적절한 해석을 보장하는 문자 인코딩.

C 11의 출현으로 std::codecvt_utf8 패싯은 UTF-8로 인코딩된 바이트 문자열을 UCS2 또는 UCS4 문자열로 변환하기 위한 강력한 솔루션을 제공합니다. 이 패싯은 UTF-8 파일의 읽기 및 쓰기를 모두 용이하게 할 수 있습니다.

std::codecvt_utf8 패싯 사용

std::codecvt_utf8 패싯을 효과적으로 사용하려면 다음 단계가 포함됩니다.

  1. 문화별 정보를 캡슐화하고 UTF-8 변환 패싯을 포함하는 로캘 개체를 만듭니다.
  2. ifstream의 스트림 버퍼에 현지화된 정보를 삽입합니다. .
  3. 내장된 스트림 버퍼를 사용하여 UTF-8 파일을 읽습니다.

이 접근 방식의 구현 예는 다음과 같습니다.

#include <sstream>
#include <fstream>
#include <codecvt>

std::wstring readFile(const char* filename) {
  std::wifstream wif(filename);
  wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
  std::wstringstream wss;
  wss << wif.rdbuf();
  return wss.str();
}

이 함수 UTF-8 콘텐츠를 wstring 변수에 편리하게 로드하는 데 활용할 수 있습니다.

대안: 전역 C 로캘 설정

또는 전역 C를 설정할 수도 있습니다. 문자열 스트림으로 작업하기 전에 로케일을 UTF-8로 설정하세요. 이렇게 하면 스트림 버퍼를 수동으로 추가할 필요가 없습니다.

std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));

이 접근 방식을 사용하면 모든 후속 표준 로케일 생성자가 수정된 전역 C 로케일의 복사본을 반환하므로 UTF-8 인코딩을 자동으로 처리할 수 있습니다.

위 내용은 Windows에서 UTF-8 콘텐츠를 Wstrings에 로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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