SPAN class=postbodyiconv 의 사용예제 소스입니다. br /br /예전에는 libiconv.so 를 링크해야만 했던 시절이 있었으나 br /최근 glibc 에서는 iconv library 가 내장되어 좀 편리해졌습니다. br /br //SPAN
TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0
TBODY
TR
TDSPAN class=genmedB코드:/B/SPAN/TD/TR
TR
TD class=code/* br /nbsp; Copyright (C) Information Equipment co.,LTD br /nbsp; All rights reserved. br /nbsp; Code by JaeHyuk Cho lt;mailto:minzkn@infoeq.comgt; br /nbsp; CVSTAG=$Id$ br /*/ br /br /#include lt;stdio.hgt; br /#include lt;stdlib.hgt; br /#include lt;malloc.hgt; br /#include lt;string.hgt; br /br /#include lt;iconv.hgt; br /br /typedef unsigned short t_iconv_word; br /br /t_iconv_word (do_iconv)(const char *s_charset, t_iconv_word s_wchar) br /{ br /nbsp;iconv_t s_iconv; br /nbsp;t_iconv_word s_buffer[ 16 ], s_code = (t_iconv_word)0x0020; br /nbsp;s_iconv = iconv_open(UTF-16, s_charset); br /nbsp;if(s_iconv != ((iconv_t)(-1))) br /nbsp;{ br /nbsp; char *s_in, *s_out; br /nbsp; size_t s_in_size, s_out_size, s_result_size; br /nbsp; s_in = (char *)(amp;s_wchar); br /nbsp; s_in_size = sizeof(s_wchar); br /nbsp; s_out = (char *)(amp;s_buffer[0]); br /nbsp; s_out_size = sizeof(s_buffer); br /nbsp; s_result_size = iconv(s_iconv, (char **)(amp;s_in), (size_t *)(amp;s_in_size), (char **)(amp;s_out), (size_t *)(amp;s_out_size)); br /nbsp; if(s_result_size != ((size_t)(-1)))s_code = s_buffer[1]; br /nbsp; (void)iconv_close(s_iconv); br /nbsp;} br /nbsp;else (void)fprintf(stderr, can not open iconv\n); br /nbsp;return(s_code); br /} br /br /int (do_make_header)(const char *s_file_name, const char *s_symbol, t_iconv_word *s_map, size_t s_map_size) br /{ br /nbsp;FILE *s_file; br /nbsp;size_t s_offset, s_index; br /nbsp;s_file = fopen(s_file_name, wb); br /nbsp;if(s_file != ((FILE *)0)) br /nbsp;{ br /nbsp; (void)fprintf(s_file, const unsigned short %s[] = {\n, s_symbol); br /nbsp; s_offset = (size_t)0; br /nbsp; do br /nbsp; { br /nbsp; nbsp;s_index = s_offset / sizeof(t_iconv_word); br /nbsp; nbsp;if((s_index % 16) == ((size_t)0)) br /nbsp; nbsp;{ br /nbsp; nbsp; if(s_index != ((size_t)0))(void)fprintf(s_file, \n); br /nbsp; nbsp; (void)fprintf(s_file, ); br /nbsp; nbsp;} br /nbsp; nbsp;(void)fprintf(s_file, 0x%04x, (unsigned int)s_map[s_index]); br /nbsp; nbsp;s_offset += sizeof(t_iconv_word); br /nbsp; nbsp;if(s_offset lt; s_map_size)(void)fprintf(s_file, , ); br /nbsp; nbsp;else break; br /nbsp; }while(1); br /nbsp; (void)fprintf(s_file, \n};\n); br /nbsp; (void)fclose(s_file); br /nbsp;} br /nbsp;else (void)fprintf(stderr, can not write \%s\\n, s_file_name); br /nbsp;return(0); br /} br /br /int (main)(int s_argc, char **s_argv) br /{ br /nbsp;t_iconv_word *s_map[3], s_wchar; br /nbsp;size_t s_map_size, s_offset, s_index; br /nbsp;s_map_size = sizeof(t_iconv_word) * (0x10000 gt;gt; 1); br /nbsp;s_map[0] = (t_iconv_word *)malloc(s_map_size); br /nbsp;s_map[1] = (t_iconv_word *)malloc(s_map_size); br /nbsp;s_map[2] = (t_iconv_word *)malloc(s_map_size); br /nbsp;if((s_map[0] != ((t_iconv_word *)0)) amp;amp; (s_map[1] != ((t_iconv_word *)0)) amp;amp; (s_map[2] != ((t_iconv_word *)0))) br /nbsp;{ br /nbsp; s_offset = (size_t)0; br /nbsp; s_wchar = (t_iconv_word)0x8000; br /nbsp; while(s_offset lt; s_map_size) br /nbsp; { br /nbsp; nbsp;s_index = s_offset / sizeof(t_iconv_word); br /nbsp; nbsp;s_map[0][s_index] = do_iconv(EUCKR, s_wchar); br /nbsp; nbsp;s_map[1][s_index] = do_iconv(EUCJP, s_wchar); br /nbsp; nbsp;s_map[2][s_index] = do_iconv(CP949, s_wchar); br /nbsp; nbsp;(void)fprintf(stdout, br /nbsp; nbsp; conv 0x%04x -gt; euckr=0x%04x, eucjp=0x%04x, cp949=0x%04x\n, br /nbsp; nbsp; (unsigned int)s_wchar, br /nbsp; nbsp; (unsigned int)s_map[0][s_index], (unsigned int)s_map[1][s_index], (unsigned int)s_map[2][s_index]); br /nbsp; nbsp;s_wchar++; br /nbsp; nbsp;s_offset += sizeof(t_iconv_word); br /nbsp; } br /nbsp; (void)do_make_header(euckr_map.h, c_mzapi_euckr_map, (t_iconv_word *)(amp;s_map[0][0]), s_map_size); br /nbsp; (void)do_make_header(eucjp_map.h, c_mzapi_eucjp_map, (t_iconv_word *)(amp;s_map[1][0]), s_map_size); br /nbsp; (void)do_make_header(cp949_map.h, c_mzapi_cp949_map, (t_iconv_word *)(amp;s_map[2][0]), s_map_size); br /nbsp; free((void *)s_map[0]); br /nbsp; free((void *)s_map[1]); br /nbsp; free((void *)s_map[2]); br /nbsp;} br /nbsp;else (void)fprintf(stderr, can not allocate memory\n); br /nbsp;return(0); br /} br /br //* vim: set expandtab: */ br //* End of source *//TD/TR/TBODY/TABLE
받은 트랙백이 없고,
댓글이 없습니다.
mziconv.tar.bz2
글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/174댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/174