VC 컴 파일 iconv 라 이브 러 리
5094 단어 iconvwindows 아래 iconv
iconv 라 이브 러 리 는 인 코딩 형식 변환 을 실현 할 수 있 습 니 다. 기본 값 은 Linux 버 전 입 니 다. windows 에서 사용 하려 면 VC 에서 다시 컴 파일 해 야 합 니 다.
1. iconv 라 이브 러 리 다운로드http://ftp.gnu.org/pub/gnu/libiconv/ 이 주소 에서 원 하 는 버 전 을 다운로드 합 니 다.
2. VC6 새 win 32 정적 라 이브 러 리 프로젝트, libIconv.iconv 라 이브 러 리 lib 폴 더 의 모든 파일 을 프로젝트 폴 더 로 복사 합 니 다.
3. config. h. in 을 config. h 로 변경
4. libcharset / lib / localcharset. c 를 복사
5. include 폴 더 아래 iconv. h. in 을 복사 하여 iconv. h 로 이름 바 꾸 기
6. 라 이브 러 리 에 있 는 scrLib / localcharset. h 를 복사 합 니 다.
7. 프로젝트 속성, C / C + +, Preprocssor, Additional include diretory 현재 폴 더 추가 "."
8. iconv. h 수정:
a. 모든 @ 기호 삭제,
b. 주석 지우 기 / * DLLVARIABLE*/,
c. ICONV_CONST 를 const 로 변경,
9. localcharset. c 수정:
설명 삭제 \ # include "configmake. h"
10. main 함수 가 있 는. c 파일 삭제
libIconv. lib 를 생 성 합 니 다. 헤더 파일 은 iconv. h 입 니 다.
주의: VS 2008 에서 두 번 째 주의
, 먼저 빈 프로젝트 를 만 들 고 프로젝트 속성 에 들 어 갈 수 있 습 니 다. 일반적인 - > 설정 형식 - > 정적 라 이브 러 리 (. lib)
VC6 컴 파일 된 라 이브 러 리 는 VS 2008 에서 사용 할 수 없고 VS 2008 에서 다시 컴 파일 해 야 합 니 다.
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////
다음은 인증 코드 (VLC 에서 복사) 입 니 다.
#include <iconv.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"libIconv.lib")
static char *dvbsi_to_gb2312( char*psz_instring, size_t i_length )
{
char *psz_encoding, *psz_stringstart, *psz_outstring, *psz_tmp;
char psz_encbuf[12];
size_t i_in, i_out;
iconv_t iconv_handle;
if( i_length < 1 ) return NULL;
if( psz_instring[0] >= 0x20 )
{
psz_stringstart = psz_instring;
psz_encoding = "ISO_8859-1"; /* should be ISO6937 according tospec,
but this seems to be the one used */
}else switch( psz_instring[0] )
{
case 0x01:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-5";
break;
case 0x02:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-6";
break;
case 0x03:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-7";
break;
case 0x04:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-8";
break;
case 0x05:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-9";
break;
case 0x06:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-10";
break;
case 0x07:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-11";
break;
case 0x08:
psz_stringstart = &psz_instring[1]; /*possibly reserved?*/
psz_encoding = "ISO_8859-12";
break;
case 0x09:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-13";
break;
case 0x0a:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-14";
break;
case 0x0b:
psz_stringstart = &psz_instring[1];
psz_encoding = "ISO_8859-15";
break;
// case 0x10:
// if( i_length < 3 ||psz_instring[1] != '\0' || psz_instring
[2] > 0x0f
// || psz_instring[2]== 0 )
// returnEnsureUTF8(strndup(psz_instring,i_length));
// sprintf( psz_encbuf,"ISO_8859-%d", psz_instring[2] );
// psz_stringstart =&psz_instring[3];
// psz_encoding =psz_encbuf;
// break;
case 0x11:
psz_stringstart = &psz_instring[1];
psz_encoding = "UTF-16";
break;
case 0x12:
psz_stringstart = &psz_instring[1];
psz_encoding = "KSC5601-1987";
break;
case 0x13:
psz_stringstart = &psz_instring[1];
psz_encoding = "GB2312";/*GB-2312-1980 */
break;
case 0x14:
psz_stringstart = &psz_instring[1];
psz_encoding = "BIG-5";
break;
// case 0x15:
// returnEnsureUTF8(strndup(&psz_instring[1],i_length-1));
// break;
default:
/* invalid */
return NULL; // todo EnsureUTF8(strndup(psz_instring,i_length));
}
iconv_handle = iconv_open( "GB2312", psz_encoding );
i_in = i_length - (psz_stringstart - psz_instring );
i_out = i_in * 6;
psz_outstring = psz_tmp = (char*)malloc( i_out * sizeof(char) + 1 );
iconv( iconv_handle, (const char **)&psz_stringstart, &i_in,&psz_tmp, &
i_out );
iconv_close( iconv_handle );
*psz_tmp = '\0';
return psz_outstring;
}
int main()
{
char a[] = {0x11, 0x73, 0xAF, 0x74, 0x03, 0x65, 0xC5, 0x6E, 0x38, 0x00};
char *b = dvbsi_to_gb2312(a, sizeof(a));
printf("%s\r
", b);
return 0;
}