VC 컴 파일 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; }

좋은 웹페이지 즐겨찾기