유니코드 UTF-8 파일을 WString으로 읽기
Windows 환경에서 C 11을 사용하면 유니코드(UTF-8)를 읽을 수 있는 기능이 제공됩니다. 파일을 wstring으로 변환합니다. 이는 std::codecvt_utf8 패싯을 활용하여 가능합니다.
std::codecvt_utf8 패싯
std::codecvt_utf8 패싯은 UTF- 8개의 인코딩된 바이트 문자열과 UCS2 또는 UCS4 문자열. 이러한 다양한 기능을 통해 텍스트 및 바이너리 UTF-8 파일을 모두 읽고 쓸 수 있습니다.
사용
패싯을 사용하는 구현에는 패싯을 캡슐화하는 로케일 개체를 만드는 작업이 포함됩니다. 및 로케일별 정보. 이 로케일을 스트림 버퍼에 추가하면 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(); } int main() { std::wstring wstr = readFile("a.txt"); // Do something with your wstring return 0; }
전역 로케일 설정
또는 std::codecvt_utf8 패싯을 사용하여 전역 C 로캘을 설정할 수도 있습니다. 이 방법을 사용하면 모든 std::locale 기본 생성자가 전역 로케일의 복사본을 반환하므로 명시적인 스트림 버퍼 삽입이 필요하지 않습니다.
전역 로케일을 설정하려면:
std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
이 설정을 사용하면 파일 읽기 작업을 다음과 같이 단순화할 수 있습니다.
std::wifstream wif("a.txt"); std::wstringstream wss; wss << wif.rdbuf(); std::wstring wstr = wss.str();
위 내용은 C 11에서 유니코드 UTF-8 파일을 wstring으로 어떻게 읽을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!