通过libiconv实现文字编码转换
来源:互联网 发布:java socket通信原理 编辑:程序博客网 时间:2024/06/06 10:39
注意:
(一)size_t iconv (iconv_t cd,
const char* * inbuf, size_t * inbytesleft,
char* * outbuf, size_t * outbytesleft);
函数iconv在调用之后输出的*outbytesleft值并非转码输出的字节长度,而是说明了outbuf中有多少字节剩余,所以应该在函数调用之前先保存*outbytesleft的值(outsize = * outbytesleft),在函数调用之后再outsize - *outbytesleft,就得到转码后输出的字符串的字节数了。
(二)
函数iconv在调用会改变outbuf的值,所以调用函数之前应该先保存其原始值,以便获得转码后的数据
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <iconv.h>
int main()
{
int i =0;
iconv_tconvert = iconv_open("UTF-8", "UTF-16"); //iconv_open(const char*tocode, const char* fromcode)
if (convert== iconv_t(-1)) {
printf("encode convert not supported!\n");
//if (errno == EINVAL)
//cout << "einval"<< endl;
return -1;
}
//charstr[12] = {0xff, 0xfe, 0x68, 0x0, 0x65, 0x0, 0x6c, 0x0, 0x6c, 0x0,0x6f, 0x0};
char str[12]= { 0xff, 0xfe, 0x10, 0x55, 0xe3, 0x5a, 0x2c, 0x0, 0x57, 0x7f,0x4b, 0x66 }; //唐嫣,罗晋
//size_tinsize = strlen(str)+1;
//char*input = (char*)malloc(insize);
size_tinsize = 12;
char *input= (char*) malloc(insize);
char *old1 =input; //save address
memcpy(input, str, insize);
for (i = 0;i < insize; i++) {
printf("%x ", old1[i]);
}
printf("\n");
size_toutsize = insize + 20;
char *output= (char*) malloc(outsize);
char *old2 =output; //save address
memset(output, 0, outsize);
int rc =iconv(convert, (const char**) &input,&insize, &output,&outsize);
if (rc != 0){
if (errno == EILSEQ)
printf("EILSEQ\n");
else if (errno == EINVAL)
printf("EINVAL\n");
}
printf("output is : %d,%d, %d: %s\n", outsize, strlen(old2), rc,old2);//转换后的内容存在原output地址处,由于output值被iconv修改了,因此通过old2来得到原output值
for (i = 0;i < 32 - outsize; i++) {
printf("%x ", old2[i]);
}
printf("\n");
free(old1);
free(old2);
iconv_close(convert);
return0;
}
(一)size_t iconv (iconv_t cd,
函数iconv在调用之后输出的*outbytesleft值并非转码输出的字节长度,而是说明了outbuf中有多少字节剩余,所以应该在函数调用之前先保存*outbytesleft的值(outsize = * outbytesleft),在函数调用之后再outsize - *outbytesleft,就得到转码后输出的字符串的字节数了。
(二)
函数iconv在调用会改变outbuf的值,所以调用函数之前应该先保存其原始值,以便获得转码后的数据
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <iconv.h>
int main()
{
}
0 0
- 通过libiconv实现文字编码转换
- GNU libiconv 编码转换库
- 字符编码转换libiconv库
- 开源编码转换库libiconv
- 嵌入式 字符编码转换libiconv库
- 嵌入式 安装 字符编码转换 libiconv库
- arm移植libiconv(字符编码转换)
- 解决由于libiconv库无法编码通过的问题
- 通过Java实现文件的编码转换
- [C/C++]_[使用libiconv库转换字符编码]
- GNU-libiconv编码转换库的使用举例
- LR实现普通文字转换为URL格式编码
- 文字转换为二进制/十六进制(Uncode编码 java实现)
- libiconv 支持的编码
- 文字编码转换[待补充]
- 使用libiconv库处理linux下字符编码转换的问题
- 使用libiconv库,解决多语言编码处理转换等应用问题
- linux下C语言utf-8编码与gb2312转换代码---libiconv
- 将lame移植到Android
- Linux声卡录音程序之——mp3(通过ALS…
- linux 常用文本命令总结(转)
- wpa_cli和wpa_supplicant使用,配…
- 读mp3文件ID3V2信息,文字编码转换…
- 通过libiconv实现文字编码转换
- 通过curl命令发布微博
- Linux下从声卡内录成mp3文件
- 【转】听力完全突破法
- 在Ubuntu下安装lighttpd
- 佛教与中医推荐的养生秘诀10…
- 如何安装node.js 以及编写运…
- 用javascript在canvs上绘制圆角矩…
- stardict突然出问题 不能够启动