windows下如何用iconv.h

windows下如何用iconv.h,第1张

头文件"iconv.h"。iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。

它的作用是在多种国际编码格式之间进行文本内码的转换。

linux下的函数原型

size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)

iconv是一个计算机程序以及一套应用程序编程接口的名称。

作为应用程序的iconv采用命令行界面,允许将某种特定编码的文件转换为另一种编码。

iconv基于GPL公开源代码,是GNU项目的一部分。在各种UNIX *** 作系统下均可使用,而在Windows系统,需要特殊的环境如cygwin或者GnuWin32等软件平台下方可使用。现在在SourceForge上也有运行于Windows系统的,需要同时安装gettext程序。

目前版本为2.3.26,支持的内码包括:Unicode相关编码,如UTF-8、UTF-16等等,各国采用的ANSI编码,其中包括GB2312、BIG5等中文编码方式。

输入/输出格式规范:

-f,--from-code=NAME始文本编码-t,--to-code=NAME输出编码

信息:

-l,--list列举所有已知的字符集

-c从输出中忽略无效的字符-o,--output=FILE输出文件-s,--silentsuppresswarnings--verbose打印进度信息-?,--help给出该系统求助列表--usage给出简要的用法信息-V,--version打印程序版本号示例:

列出支持的字符编码

[root@new55~]#iconv-lThefollowinglistcontainallthecodedcharactersetsknown.ThisdoesnotnecessarilymeanthatallcombinationsofthesenamescanbeusedfortheFROMandTOcommandlineparameters.Onecodedcharactersetcanbelistedwithseveraldifferentnames(aliases).所有已知字符集

 

头文件"inconv.h"。iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。

它的作用是在多种国际编码格式之间进行文本内码的转换。

作为编程接口的iconv包括3个函数:

iconv_open函数用于初始化用于转换的内部缓冲区,需要指明需要从何种编码方式转换到哪一种。

iconv函数进行实际的转换,需要给出两个间接缓冲区指针和剩余字节数指针。该函数需要更新所有相关信息,因此将不可改写的指针传递给iconv是错误的。

iconv_close函数释放iconv_open函数的缓冲区。

指令:

#iconv -f GB2312 -t UTF-8 gb1.txt >gb2.txt 将gb1里的编码从GB2312转化成UTF-8 并重定向到gb2.txt

除了iconv命令,我们在linux系统下的man page的第三节还可以看到一组iconv函数。它们分别是

iconv_t iconv_open(const char *tocode, const char *fromcode)

size_ticonv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)

int iconv_close(iconv_t cd)

iconv_open函数用来打开一个编码转换的流,iconv函数的作用是实际进行转换,iconv_close函数的作用就是关闭这个流。实际用法参见下面的例子,下面是一个将UTF-8码转换成GBK码的例子,我们假设已经有了一个uft8编码的输入缓冲区inbuf以及这个缓冲区的长度inlen。

iconv_t cd = iconv_open( "GBK", "UTF-8")

char *outbuf = (char *)malloc(inlen * 4 )

bzero( outbiuf, inlen * 4)

char *in = inbuf

char *out = outbuf

size_t outlen = inlen *4

iconv(cd, &in, (size_t *)&inlen, &out,&outlen)

outlen = strlen(outbuf)

printf("%s\n",outbuf)

free(outbuf)

iconv_close(cd)

非常值得注意的地方是:iconv函数会修改参数in和参数out指针所指向的地方,也就是说,在调用iconv函数之前,我们的in和inbuf指针以及out和outbuf指针指向的是同一块内存区域,但是调用之后out指针所指向的地方就不是outbuf了,同理in指针。所以要

char *in = inbuf

char *out = outbuf

另存一下,使用或者释放内存的时候也要使用原先的那个指针outbuf和inbuf。

最新版的iconv(目前是libiconv-1.14.tar.gz)已经不再提供Visual C++的编译文件,最后一个支持VC编译的iconv版本是libiconv-1.11.1.tar.gz。虽然不是最新版,但是在Windows下编译,只好将就了,功能应该差不了多少。

下载libiconv-1.11.1.tar.gz并解压,打开命令提示行,进入libiconv-1.11.1目录,输入命令:

[html] view plain copy print?

nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD

nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD PREFIX=C:\iconv install

等待编译结束后就能在C:\iconv找到相应的头文件和库文件了。

[plain] view plain copy print?

iconv.exe --version

[plain] view plain copy print?

iconv (GNU libiconv 1.11)

Copyright (C) 2000-2006 Free Software Foundation, Inc.

This is free softwaresee the source for copying conditions. There is NO

warrantynot even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Written by Bruno Haible.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11756848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存