#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iconv.h>
#ifndef ICONV_CONST
# define ICONV_CONST const
#endif
/*!
对字符串进行语言编码转换
param from 原始编码,比如"GB2312",的按照iconv支持的写
param to 转换的目的编码
param save 转换后的数据保存到这个指针里,需要在外部分配内存
param savelen 存储转换后数据的内存大小
param src 原始需要转换的字符串
param srclen 原始字符串长度
*/
int
convert(const char *from, const char *to, char* save, int savelen, char *src, int srclen)
{
iconv_t cd;
char *inbuf = src;
char *outbuf = save;
size_t outbufsize = savelen;
int status = 0;
size_t savesize = 0;
size_t inbufsize = srclen;
const char* inptr = inbuf;
size_t insize = inbufsize;
char* outptr = outbuf;
size_t outsize = outbufsize;
cd = iconv_open(to, from);
iconv(cd,NULL,NULL,NULL,NULL);
if (inbufsize == 0) {
status = -1;
goto done;
}
while (insize > 0) {
size_t res = iconv(cd,(ICONV_CONST char**)&inptr,&insize,&outptr,&outsize);
if (outptr != outbuf) {
int saved_errno = errno;
int outsize = outptr - outbuf;
strncpy(save+savesize, outbuf, outsize);
errno = saved_errno;
}
if (res == (size_t)(-1)) {
if (errno == EILSEQ) {
int one = 1;
iconvctl(cd,ICONV_SET_DISCARD_ILSEQ,&one);
status = -3;
} else if (errno == EINVAL) {
if (inbufsize == 0) {
status = -4;
goto done;
} else {
break;
}
} else if (errno == E2BIG) {
status = -5;
goto done;
} else {
status = -6;
goto done;
}
}
}
status = strlen(save);
done:
iconv_close(cd);
return status;
}
分享到:
相关推荐
Android NDK(Native Development Kit)提供了一种方法来实现这样的编码转换,这就是使用Iconv库。Iconv是一个广泛使用的字符集转换工具,它允许在多种字符编码之间进行转换,包括Unicode、GBK和UTF-8。 Iconv在C/...
总之,`ICONV`字符转换库是处理编码转换问题的重要工具,它为开发者提供了便利,使得在不同编码系统间的数据交换变得简单和可靠。无论是编程还是日常文件处理,理解并掌握`ICONV`的使用都对提升工作效率大有裨益。
"iconv字符编码转换的操作实例"这个标题表明我们将探讨如何使用iconv库在C++环境中进行字符编码的转换。iconv是一个广泛使用的跨平台库,用于在不同字符编码之间进行转换,例如从GBK(中国的常见编码)转换到UTF-8...
总之,C语言虽然没有内置的字符编码转换机制,但通过理解不同编码的原理和使用适当的库或API,可以实现UNICODE、GBK和UTF-8之间的转换。在进行这样的编程时,确保充分理解字符编码的细节,以及处理异常情况的方法,...
【标题】"Discuz 提供的编码转换工具"涉及到的是网站论坛系统Discuz!中的一种常见操作,即字符编码的转换。在互联网发展的初期,不同的字符编码标准(如GBK和UTF-8)导致了跨平台、跨语言交流时的数据不兼容问题。...
在Ruby中,我们可以使用`Iconv`类或者`String#encode`方法来实现编码转换。 例如,如果我们有一个GBK编码的字符串,需要转换为UTF-8,可以使用以下Ruby代码: ```ruby require 'iconv' # 假设原始GBK编码的字符串...
iconv是一个广泛使用的字符编码转换工具,主要用于在不同的字符编码之间进行转换,以解决不同系统或应用程序之间的文本兼容性问题。在IT行业中,理解和使用iconv对于处理多语言环境下的数据交换至关重要。以下是对...
在C语言中,进行编码转换通常会用到库函数,如`libiconv`或`libcurl`。`libiconv`是一个通用的字符集转换库,它支持多种编码间的转换,包括GBK、UTF-8等。`libcurl`则是一个用于HTTP和其他网络协议交互的库,虽然...
不同的编码方式适用于不同的场景,例如UTF-8是全球通用的标准编码,支持多种语言,而GBK是中国大陆常用的一种编码,包含更多的中文字符。 该工具的核心功能在于批量转换,这意味着你可以一次性处理整个文件夹中的...
"编码转换iocnv"这个主题涉及到C++编程语言中的iconv库,以及在Windows 2010环境下如何使用该库进行字符编码的转换。本文将深入探讨iconv库的功能、在Windows上的应用以及如何在C++项目中集成和使用它。 首先,...
5. **工具与库**:许多编程语言都有专门用于处理编码转换的库,如Python的`codecs`模块、Java的`CharsetEncoder`和`CharsetDecoder`,以及Node.js的`iconv-lite`模块。了解如何使用这些工具是关键。 6. **跨平台...
iconv-1.14-win32-x86_64是一个针对Windows 32位x86_64架构的iconv库版本,它主要用于字符编码转换。iconv是Unicode编码与各种其他字符编码之间转换的一个工具,广泛应用于跨语言环境的软件开发中,以确保数据在不同...
通过阅读和分析这个文件,你可以了解如何在D语言项目中集成iconv库,并学习如何利用D语言的特性来操作和管理编码转换。 "LibiconvForD.rar"是一个包含D语言版本的libiconv库的压缩文件。libiconv是一个开源的、跨...
在IT行业中,尤其是在Web开发领域,编码转换是一个常见的任务,特别是在处理多源数据或与不同系统交互时。PHP作为一款广泛使用的服务器端脚本语言,提供了处理和转换各种字符编码的功能。本文将深入探讨PHP中关于...
通过分析这个文件,我们可以学习到如何在PHP中处理字符串编码,例如使用`ord()`和`chr()`函数操作单个字符,或者使用`iconv()`或`mb_convert_encoding()`函数进行整个字符串的编码转换。 在深入研究这个源码时,...
此程序旨在演示如何利用`iconv`库来进行字符编码转换。`iconv`是GNU C库的一部分,用于处理不同字符集之间的转换。 #### 程序结构与功能 该程序主要由以下几个部分组成: 1. **头部文件引入**: - `<iconv.h>`:...
在Windows环境下,C++开发过程中,常常需要处理各种编码格式之间的转换,比如GB2312(简体中文的一种常见编码)与UTF-8(通用的多语言编码)。本项目提供的"ChineseCode.cpp"和"ChineseCode.h"文件,正是为了解决这...
GBK是GB2312的扩展,包含了更多的汉字和符号,包括部分繁体字,而Unicode则是一个全球通用的编码标准,可以涵盖世界上大部分语言,包括简体和繁体中文。 "cn_zhn.html"可能是一个HTML文件,它可能包含了一个网页...
标题中的“pb12 gb转utf-8”指的是在编程领域中进行的一种字符编码转换操作。PB12可能是指PowerBuilder 12,一个流行的Windows应用程序开发工具,而GB和UTF-8则涉及到字符编码标准。 GB(通常指的是GBK或GB2312)是...