c语言iconv函数 linux iconv函数

100财富给牛逼之人!就没人知道在linux下用c语言如何将汉字的unicode编码转化为汉字吗?

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

创新互联建站是一家企业级云计算解决方案提供商,超15年IDC数据中心运营经验。主营GPU显卡服务器,站群服务器,遂宁联通机房,海外高防服务器,成都机柜租用,动态拨号VPS,海外云手机,海外云服务器,海外服务器租用托管等。

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( outbuf, 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);

linux下C语言iconv字符转换问题

#include iconv.h

size_t iconv(iconv_t cd,

char **inbuf, size_t *inbytesleft,

char **outbuf, size_t *outbytesleft);

你看函数原型, outbuf是一个 char **类型

在函数手册中:

The iconv() function converts one multibyte character at a time, and for each character conversion it increments *inbuf and decrements

*inbytesleft by the number of converted input bytes, it increments *outbuf and decrements *outbytesleft by the number of converted

output bytes

也就是说,当你执行过iconv以后,*outbuf所指向的内存空间位置已经被改掉了, 所以你任何时候去读*outbuf, 都是读不到任何iconv后的数据的(都在*outbuf这个指针前面放着呢)。

所以你应该 预先备份outbuf的数据,

比如 char k[1000]; char *outb = k; 执行完iconv(t,inb,inl,outb,outl)以后,你去读k数组就可以了。

linux下编码转换问题,C语言实现,使用iconv函数族

我觉得这是文件编码的问题,就是说linux下的文件编码一般情况下是utf-8的,所以就出现这个问题了。

用linux c语言编写 为一个文件里面的内容的每一行添加一个指定的字符

1、基本思路:从第一个文本文件中用

fgets()

函数读出一行数据,对读出的每一行数据进行判断,如果需要在它的适当位置插入一行,把相应的新内容、以及该行的内容写到第二个文本文件中。如果不需要在该位置插入一行,那就直接将该行数据用

fprintf()

函数写入第二个文本文件中。

2、伪代码:

1.打开要修改的文件A,

2.创建一个临时文件B,

3.

while(没到达文件A末尾)

从A中读取一行,写到B中,然后写入要追加的内容,写入换行符

4.关闭文件A,关闭文件B,

5.删除文件A(用remove函数),重命名B为A(用rename函数)


分享题目:c语言iconv函数 linux iconv函数
URL链接:http://azwzsj.com/article/docdids.html