2013-10-11 9 views
0
int main() 
{ 
    char str[200] = {0}; 
    char out[500] = {0}; 

    str[0]=0x00; str[1]=0x52; str[2]=0x00; str[3]=0x65; str[4]=0x00; str[5]=0x73; str[6]= 0x00; str[7]=0x74; 

    for(int i=0;i<sizeof(str);i++) 
    cout<<"-"<<str[i]; 
    changeCharEncoding("UCS-2","ISO8859-1",str,out,sizeof(out)); 
    cout<<"\noutput : "<<out; 
    for(int i=0;i<sizeof(out);i++) 
    cout<<":"<<out[i]; 
} 

//encoding function 
int changeCharEncoding(const char *from_charset, const char *to_charset, const char *input, char *output, int out_size) 
{ 
    size_t input_len = 8; 
    size_t output_len = out_size; 
    iconv_t l_cd; 
    if ((l_cd = iconv_open (to_charset, from_charset)) == (iconv_t) -1) 
    { 
      return -1; 
    } 
    int rc = iconv(l_cd, (char **)&input, &input_len, (char **)&output, &output_len); 
    if (rc == -1) 
    { 
      iconv_close(l_cd); 
      return -2; 
    } 
    else 
    { 
      iconv_close(l_cd); 
    } 
} 

16 비트 데이터를 8 비트로 변환하는 방법을 제안 해주십시오. iconv를 사용하여 시도해 보았습니다. 같은 것을 할 다른 것이 있다면 나에게 제안해라.16 비트 데이터를 8 비트로 변환해야합니다.

+0

로 변경하십시오. 오버플로로 무엇을 할 건가요? 문자 집합을 변환하는 경우 원본 및 대상 인코딩을 매우 잘 알고 있어야하며 변환 할 수없는 변환을 처리하는 메커니즘이 필요합니다. –

+1

"데이터"란 무엇을 의미합니까? 그리고 "개종하다"는 것은 무엇을 의미합니까? 유니 코드 텍스트의 ASCII 표현을하려고합니까? –

+0

또한 C ** XOR ** C++? 정확히 하나 골랐어 요. –

답변

0

는 일반적으로 - 당신이 8 개 비트 데이터로 임의의 16 개 비트 데이터를 변환 할 수 없습니다, 당신은 인코딩을 변환하려는 경우 일부 데이터

을 잃어 버리게된다 - 같은 규칙을 적용하면 8 비트에 일부 기호를 변환 할 수있는,

윈도우 :가 손실 될 수 있도록 ASCII는 다른 플랫폼에 대한 서로 다른 기능을 사용할 수 있습니다 WideCharToMultiByte

* nix에서 스크립트 : 당신이 Conver 유럽하려고하는 것처럼 iconv

+0

위의 코드에서 iconv를 사용했지만 동일하게 작동하지 않습니다. 그리고 일부 데이터가 손실되어 문제가 아님을 알고 있습니다. – user2843171

+0

왜 그것이 작동하지 않는다고 생각합니까? 그것은 메모리 오류, 잘못된 결과, 빈 결과입니까? –

+0

잘못된 결과가 표시됩니다 – user2843171

1

같습니다 t UTF-16 사이 UTF-8 인코딩 :

changeCharEncoding("UTF-16","UTF-8",str,out,sizeof(out)); 

결과 UTF-8 출력이 (!) 참고에

刀攀猀琀 

해야한다 : 에 changeCharEncoding()의 전화를 변경해보십시오 코드에서 몇 가지가 당신이해야 개선을 고려하십시오. 예를 들어, changeCharEncodingmainint을 반환하도록 선언되지만 구현에는 적용되지 않습니다.

+0

"Rest"가되기를 원합니다. BOM 문제가 발생했습니다. – Roddy

+0

'UTF-16'입력은'Rest'가 아니며 'UTF-8'인코딩으로 변환하면 결과가 나타납니다. – Pankrates

+0

글쎄요.UTF-16 (또는 UCS-2)의 "Rest"는 UTF-8 (또는 ISO8859-1)에서 "Rest"여야합니다. – Roddy

0

나는 당신이 엔디안 문제가 의심 :이 어렵게 될 것입니다 매우 정의입니다으로이

changeCharEncoding("UCS-2","ISO8859-1",str,out,sizeof(out)); 

changeCharEncoding("UCS-2BE","ISO8859-1",str,out,sizeof(out)); 
관련 문제