windows下字符集转换基于libiconv-1.14 VS2010编译

  • I4_612696
    了解作者
  • 2.7MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-22 05:10
    上传日期
是一个开源的字符编码转换库,实现utf-8,gb2312等各种常见的编码转换,解决乱码问题,使用VS2010编译,配置->C/C++->代码生成->运行库使用的是(/MDd) 可以直接使用,也可以根据需要自行配置 #include "iconv.h" #pragma comment(lib, "libIconv.lib")
libIconv.zip
  • libIconv
  • Debug
  • libIconv.lib
    1.3MB
  • Release
  • libIconv.lib
    2.9MB
  • libIconv
  • Debug
  • Release
  • iso8859_2.h
    4.6KB
  • ucs4swapped.h
    1.7KB
  • mulelao.h
    3.3KB
  • nextstep.h
    5.7KB
  • aliases_sysosf1.gperf
    8.1KB
  • dec_hanyu.h
    3.1KB
  • aliases_sysaix.gperf
    8.2KB
  • mac_roman.h
    6.9KB
  • big5hkscs1999.h
    5.6KB
  • encodings_local.def
    1.2KB
  • mac_turkish.h
    6.8KB
  • iconv.c
    16.2KB
  • cjk_variants.h
    247.9KB
  • utf32le.h
    1.6KB
  • cns11643_1.h
    50.8KB
  • libIconv.vcxproj.filters
    1KB
  • aliases_sysosf1.h
    71.5KB
  • big5hkscs2001.h
    6.1KB
  • cp936ext.h
    3.4KB
  • atarist.h
    6.7KB
  • iso8859_1.h
    1.2KB
  • gb2312.h
    154.5KB
  • riscos1.h
    3.4KB
  • hp_roman8.h
    4.3KB
  • georgian_academy.h
    4KB
  • utf7.h
    10KB
  • cp1129.h
    5.1KB
  • aliases_aix_sysaix.h
    824B
  • gb18030uni.h
    11.9KB
  • rk1048.h
    5.9KB
  • cns11643_5.h
    74.3KB
  • canonical_local.h
    122B
  • cns11643_7.h
    57.1KB
  • cp858.h
    1.6KB
  • canonical_osf1_sysosf1.h
    124B
  • ucs4le.h
    1.4KB
  • iconv.h
    9.2KB
  • cp1133.h
    3.6KB
  • encodings.def
    37.6KB
  • cp864.h
    7.6KB
  • uhc_1.h
    82.4KB
  • cp1163.h
    1.8KB
  • big5hkscs2008.h
    6.8KB
  • ces_gbk.h
    1.7KB
  • hkscs2001.h
    32.9KB
  • canonical_sysaix.h
    6.5KB
  • cns11643_4b.h
    39.2KB
  • canonical_syshpux.h
    6.5KB
  • cp1046.h
    6.6KB
  • loop_unicode.h
    17.3KB
  • genaliases2.c
    2.7KB
  • flags.h
    7.7KB
  • gb18030.h
    14.2KB
  • ces_big5.h
    1.9KB
  • cns11643.h
    1.5KB
  • iso2022_jp.h
    5.1KB
  • utf32.h
    2.9KB
  • iso8859_3.h
    4.6KB
  • encodings_osf1.def
    1.4KB
  • jisx0213.h
    275.2KB
  • utf16be.h
    2.3KB
  • gbkext2.h
    69.4KB
  • cp1124.h
    3.9KB
  • canonical_local_sysosf1.h
    122B
  • aliases_sysaix.h
    72.2KB
  • aliases.h
    67.9KB
  • canonical_sysosf1.h
    6.5KB
  • armscii_8.h
    4.2KB
  • cns11643_15.h
    62.8KB
  • mac_hebrew.h
    5.2KB
  • euc_kr.h
    2KB
  • iso8859_14.h
    5.3KB
  • isoir165.h
    5.6KB
  • gb18030ext.h
    14.2KB
  • mac_arabic.h
    5.4KB
  • aliases_syssolaris.h
    73.4KB
  • mac_greek.h
    5.2KB
  • loop_wchar.h
    15.2KB
  • hkscs2004.h
    32.3KB
  • relocatable.h
    3.1KB
  • utf16.h
    3.6KB
  • jisx0212.h
    130.9KB
  • euc_tw.h
    3.3KB
  • dec_kanji.h
    2KB
  • cp1251.h
    5KB
  • gbk.h
    4.6KB
  • ucs4internal.h
    1.3KB
  • cp1131.h
    5.6KB
  • aliases_extra.h
    525B
  • relocatable.c
    15KB
  • cp853.h
    6.3KB
  • gbkext1.h
    51KB
内容介绍
/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-2010 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "localcharset.h" #include <fcntl.h> #include <stddef.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET # define DARWIN7 /* Darwin 7 or newer, i.e. MacOS X 10.3 or newer */ #endif #if defined _WIN32 || defined __WIN32__ # define WIN32_NATIVE #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WIN32_NATIVE # include <unistd.h> # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else # if 0 /* see comment below */ # include <locale.h> # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # endif #elif defined WIN32_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #if defined OS2 # define INCL_DOS # include <os2.h> #endif #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif /* Get LIBDIR. */ #ifndef LIBDIR //# include "configmake.h" #endif /* Define O_NOFOLLOW to 0 on platforms where it does not exist. */ #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif #if HAVE_DECL_GETC_UNLOCKED # undef getc # define getc getc_unlocked #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases (void) { const char *cp; cp = charset_aliases; if (cp == NULL) { #if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) const char *dir; const char *base = "charset.alias"; char *file_name; /* Make it possible to override the charset.alias location. This is necessary for running the testsuite before "make install". */ dir = getenv ("CHARSETALIASDIR"); if (dir == NULL || dir[0] == '\0') dir = relocate (LIBDIR); /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } if (file_name == NULL) /* Out of memory. Treat the file as empty. */ cp = ""; else { int fd; /* Open the file. Reject symbolic links on platforms that support O_NOFOLLOW. This is a security feature. Without it, an attacker could retrieve parts of the contents (namely, the tail of the first line that starts with "* ") of an arbitrary file by placing a symbolic link to that file under the name "charset.alias" in some writable directory and defining the environment variable CHARSETALIASDIR to point to that directory. */ fd = open (file_name, O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0)); if (fd < 0) /* File not found. Treat it as empty. */ cp = ""; else { FILE *fp; fp = fdopen (fd, "r"); if (fp == NULL) { /* Out of memory. Treat the file as empty. */ close (fd); cp = ""; } else { /* Parse the file's contents. */ char *res_ptr = NULL; size_t res_size = 0; for (;;) { int c; char buf1[50+1]; char buf2[50+1]; size_t l1, l2; char *old_res_ptr; c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); old_res_ptr = res_ptr; if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = (char *) malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = (char *) realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; free (old_res_ptr); break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; }
评论
    相关推荐