2016/10/04
Write and read unicode test using wfstream
fstream을 이용하여 유니코드 문자를 저장하려 시도하였다. 쉽게 "w"만을 붙여서 wofstream을 이용하고 wchar_t 또는 wstring을 출력만 하면 될 줄 알았으나 기대대로 동작을 하지 않았다. 문자열 인코딩 문제등등 여러가지 복잡한 문제가 있었다. 여러 정보를 취합해 나중에 도움이 될 수 있도록 코드를 남겼다.
참조 문서
https://golbenge.wordpress.com/2009/12/24/stl을-이용한-unicode-텍스트-파일-출력 http://saneh.tistory.com/entry/STL-유니코드-저장읽기
class Unicodecvt : public std::codecvt<wchar_t, char, mbstate_t> { protected: virtual bool do_always_noconv() const { return true; } }; // Writting std::wofstream fOut(L"D:\\test.txt", std::ios_base::binary); fOut.imbue(std::locale(std::locale(""), ::new Unicodecvt)); fOut << wchar_t(0xFEFF); // write BOM (UTF-16LE) fOut << L"유니코드 출력 테스트: " << 12345 << std::endl; fOut.close(); // Reading std::wifstream fIn(L"D:\\test.txt", std::ios_base::binary); fIn.imbue(std::locale(std::locale(""), ::new Unicodecvt)); if ( fIn.is_open() ) { fIn.seekg(2); // Skip BOM while ( !fIn.eof() ) { wchar_t wszBuf[1024] = { 0, }; fIn.getline( (wchar_t*)wszBuf, _countof(wszBuf)); } } fIn.close();
참조 문서
https://golbenge.wordpress.com/2009/12/24/stl을-이용한-unicode-텍스트-파일-출력 http://saneh.tistory.com/entry/STL-유니코드-저장읽기
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment