命令行"iconv --list"    查看Linux操作系统支持的字符集
iconv_open    设置字符集转化
--iconv_t iconv_open(const char *tocode, const char *fromcode);
--参数tocode目标字符集的字符串
--参数fromcode源字符集的字符串
--函数成功返回描述符,失败返回-,并且设置errno
--打开后,必须使用iconv_close()函数关闭描述符
iconv    将inbuf字符集的字符串转化成outbuf新字符集下的字符串
--size_t iconv(iconv_t cd,char **inbuf, size_t *inbytesleft,char **outbuf, size_t *outbytesleft);
--参数cd表示iconv_open()函数返回的描述符
--参数inbuf需要转化的字符串的指针
--参数inbytesleft需要转化字符串长度的指针
--参数outbuf目标字符串的指针
--参数outbytesleft目标字符串长度的指针必须设置为目标字符串的最大长度
--函数失败返回-,并且设置errno
//字符集转码  GBK--UTF-8
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <iconv.h> int gbktoutf8(char *src, size_t *srclen, char *dest, size_t * destlen)
{
if(src==NULL||srclen==NULL||dest==NULL||destlen==NULL)
{
printf("function gbktoutf8 param not correct!\n");
return -;
}
//将GBK字符集转化成UTF-8字符集
iconv_t cd = iconv_open("UTF8", "GBK");
if (cd == (iconv_t)-)
{
printf("iconv open failed ! error message :%s\n", strerror(errno));
return -;
}
size_t rc = iconv(cd, &src, srclen, &dest, destlen);
if (rc < )
{
printf("iconv failed ! error message :%s\n", strerror(errno));
return -;
}
iconv_close(cd);
return ;
} int main(int arg, char *args[])
{
if (arg < )
{
printf("please print two param !\n");
return -;
}
//读一个windows文件
FILE *pfr = NULL;
pfr = fopen(args[], "r");
if (pfr == NULL)
{
printf("open the file failed ! error message :%s\n", strerror(errno));
return -;
}
char srcbuf[] = { };
size_t srclen = ;
char destbuf[] = { };
size_t destlen = ;
//read the file
while (!feof(pfr))
{
fgets(srcbuf,sizeof(srcbuf),pfr);
srclen=strlen(srcbuf);
/*必须设置返回目标字符串的长度是sizeof(destbuf),不然返回的字符串是空字符串*/
destlen = sizeof(destbuf);
//转化
if(gbktoutf8(srcbuf,&srclen,destbuf,&destlen)<)
{
break;
}
printf("%s",destbuf);
memset(destbuf,,sizeof(destbuf));
memset(srcbuf,,sizeof(srcbuf));
}
fclose(pfr);
return ;
}
windows系统下的文本文件一般都是UCS-2字符集或者GBK字符集

Linux 字符集转化的更多相关文章

  1. Linux字符集的查看及修改【转】

    一·查看字符集字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 1.[root@david ~]# echo $LANGzh_CN.G ...

  2. oracle数据库字符集和客户端字符集(2%)是不同的,字符集转化可能会造成不可预期的后果

    转载请在文章显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10036321.html 今天在plsql连接oracle时候报错提示“数据库字符集和客户 ...

  3. 修改Linux字符集

    1.查看操作系统中安装的locale信息 ls /usr/lib/locale 2.创建.i18n文件 在用户目录下创建.i18n文件,并添加如下内容: LANG="zh_CN.utf8&q ...

  4. linux字符集查看与设置

    linux字符集查看与设置 命令:locale -a   查看本地的字符集        locale -m 查看所有支持的字符集   查看当前默认设置   echo $LANG   记录系统默认使用 ...

  5. Linux学习之十一-Linux字符集及乱码处理

    Linux字符集及乱码处理 1.字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集(Character set)是多个字符的集合,字符集种类较多,每个 ...

  6. Linux学习笔记(15)Linux字符集(locale,LANG,LC_ALL)

    关键词:linux系统修改编码,linux字符集问题, 目录  零.什么是locale 一.locale的详细内容 二.理解locale的设置 三 具体设定locale的方法(zh_CN.UTF-8. ...

  7. Linux字符集的查看及修改

    一·查看字符集 字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 第一种: [root@Testa-www tmp]# echo $L ...

  8. locale localedef --之Linux字符集理解

    参考: https://www.cnblogs.com/dolphi/p/3622420.html     http://www.360doc.com/content/15/1105/08/14513 ...

  9. 关于Linux字符集的查看及修改

    一·查看字符集   字符集在系统中体现形式是一个环境变量,其查看当前终端使用字符集的方式可以有以下几种方式:   1.[root@ ~]# echo $LANG       en_US.UTF-8   ...

随机推荐

  1. LayoutTransition实现显示、隐藏动画

    public class Main4Activity extends Activity { private TextView tv1; private Button button1; private ...

  2. [转]一些NSArray,NSDictionary,NSSet相关的算法知识

    iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准 ...

  3. 异步post请求之代理方法

    #import "ViewController.h" #import "Header.h" @interface ViewController ()<NS ...

  4. 系统自带的NSJSONSerialization解析json文件

    #import "ViewController.h" #import "Student.h" #import "GDataXMLNode.h" ...

  5. iOS 核心动画

    核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...

  6. 多线程基础 (八)NSOperation相关

    额外的参考学习可以学习:http://www.cnblogs.com/YouXianMing/p/3707403.html 1.NSOperation简介   NSOperation的作用 配合使用N ...

  7. android 之 spinner的简单使用

    先看spinner的效果图: 代码: MainActivity package com.mecury.spinnertest; import java.util.ArrayList; import a ...

  8. yum命令指南-yum使用方法

    yum check-update  检查可更新的所有软件包    yum update  下载更新系统已安装的所有软件包    yum upgrade  大规模的版本升级,与yum update不同的 ...

  9. android之旋转的刻度盘

    这是在学习android的Canvas绘图技巧时做的一个实例.主要用的核心方法就是canvas.save,canvas.rotate, canvas.translate以及canvas.restore ...

  10. CSRF 攻击原理和防御方法

    1. CSRF攻击原理 CSRF(Cross site request forgery),即跨站请求伪造.我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息 ...