2011-09-03 4 views
2

다른 인코딩의 문서를 변환하는 데 현재 iconv을 사용하고 있습니다. 코드 정확도를 유지하면서 iconv 사용

size_t iconv (
    iconv_t cd, 
    const char* * inbuf, 
    size_t * inbytesleft, 
    char* * outbuf, 
    size_t * outbytesleft 
); 

지금까지, 난 단지 유형 char*의 버퍼를 변환했다 그러나 나는 또한 내가 형 wchar_t*의 버퍼를 변환 할 수 깨달았다

iconv() 기능은 다음과 같은 프로토 타입을 가지고있다. 실제로, iconv에는 이러한 버퍼에 대한 전용 인코딩 이름 인 "wchar_t"이 있습니다.이 인코딩은 운영 체제 설정에 맞게 조정됩니다. 즉, 내 컴퓨터에서는 Windows의 경우 UCS-2를, Linux의 경우 UTF-32를 나타냅니다.

그러나 여기에는 문제가있다 : 나는 wchar_t*의 버퍼를 가지고 있다면이 iconv에서 사용하는 char*의 버퍼에 reinterpret_cast 수 있지만, 그때는 구현 정의 된 행동에 직면 : 나는 모든 컴파일러가 행동 할 것을 확신 할 수 없다 캐스트와 관련해서도 마찬가지입니다.

여기서 어떻게해야합니까?

+0

'mbstowcs()'이후 명확하지 않은 "시스템 인코딩"과 확실한 인코딩 사이를 변환하려면 사실 WCHAR 인코딩이 중요합니다 ... –

답변

3

reinterpret_cast<char const*>은 실제 구현에 있어서는 안전하지 않으며 구현이 정의되지 않았습니다.

언어를 사용하면 모든 객체를 문자 배열로 재 해석 할 수 있으며 문자 배열을 얻는 방법은 reinterpret_cast입니다.

+0

내 생각을 정리해 주셔서 감사합니다. 나는'char * '변환이 충분히 안전하다고 가정했지만 그 것을 확실히 할 필요가 있었다. – ereOn