2011-09-26 4 views
1

우리는 Windows와 Linux에서 실행되는 프로그램을 가지고 있습니다. 바이너리로 std :: wstrings을 파일에 씁니다. 우리는 리눅스에서 윈도우로 작성된 파일을 읽을 수 있어야합니다. 우리는 문자열을 wchar_t의 목록으로 작성합니다. 리눅스에서 각 wchar_t는 4 바이트를 차지합니다. Windows에서 각 wchar_t는 2 바이트를 차지합니다.리눅스에서 윈도우로 작성된 std :: wstring을 읽는 방법

리눅스에서 작성한 파일을 Windows로 읽어 들일 때 어떻게 4 바이트 wchar_t를 취하여 2 바이트 wchar_t에 넣을 수 있습니까?

감사합니다, 아담

답변

1

쉽게 UTF-16 UTF-32에서 파일을 변환 할 UTF8-CPP를 사용할 수 있습니다

#include <fstream> 
#include <iterator> 
#include <utf8.h> 

int main(int argc, char** argv) { 

    std::ifstream file("source.txt"); 
    std::string intermediate; 
    std::wstring result; 

    utf8::utf32to8(std::istreambuf_iterator<char>(file), 
        std::istreambuf_iterator<char>(), 
        std::back_inserter(intermediate)); 

    utf8::utf8to16(intermediate.begin(), 
        intermediate.end(), 
        std::back_inserter(result)); 

} 

는 불행하게도 utf8::utf32to16 없다, 아마이 있어야하지만.

1

리눅스 코드 UTF-32 형식에서 쓰는 가정하면, 당신은 Windows에서 사용되는 유니 코드 인코딩 인 UTF-16 문자열을 변환하는 코드를 작성해야합니다. wstring은 당신을 도울 수 없습니다. UTF-16으로 변환하면 wchar_t를 사용하여 Windows에서 wstring에 저장할 수 있습니다.

+1

UTF-32에서 UTF-16으로의 변환 코드는 어렵지 않습니다. (http://unicode.org/faq/utf_bom.html). –

관련 문제