命令行"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. Instruments指南:如何调试内存泄露

    Instruments指南:如何调试内存泄露 开篇 现在,你应该使用的ARC,而不是原来我们使用的MRC或者其他.但是我们在使用ARC的时候也会出现内存泄露的情况. 幸运的是,苹果为我们提供了Inst ...

  2. UIView简单动画

    UIView动态实现的效果有以下几种: 1.动态改变frame 2.动态改变color 3.动态改变alpha 4.动态改变bounds 首先,我们先看几种BasicView动画 #pragma ma ...

  3. 基础学习day08---多态、简单工厂、Object类equals和toString

    一.多态 1.1.多态概念  定义:某一类事物的多种存在形态.        例:动物中猫,狗.    猫这个对象对应的类型是猫类型:猫 x = new 猫();    同时猫也是动物中的一种,也可以 ...

  4. 全球最低功耗蓝牙单芯片DA14580的硬件架构和低功耗

    号称全球最低功耗蓝牙单芯片DA14580在可穿戴市场.健康医疗.ibeacon定位等市场得到广泛的应用,但是因为其较为封闭的技术/资料支持导致开发人员有较高的技术门槛,网络上也极少看到有关DA1458 ...

  5. iOS 通过二进制判断图片类型

    + (NSString *)typeForImageData:(NSData *)data { uint8_t c; [data getBytes:&c length:1]; switch ( ...

  6. win7共享文件夹给局域网

    1.设置共享   2.关闭"需要密码访问"          

  7. 解决Junit单元测试 找不到类 ----指定Java Build Path

    做junit 单元测试时,发现怎么执行都是以前编译过得代码. 最后找到原因了, src/test/java 编译完的.class路径是 Default output folder Default ou ...

  8. 设计模式 --- 单例模式(Singleton)

    一.概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如 ...

  9. [Tomcat]如何在同一台机部署多个tomcat服务

    背景:往往不知情的同学在同一台机器上部署多个tomcat会发现第二个tomcat启动会报错.而有些同学会想到可能是端口重复,然而,在server.xml改了端口还是发现不行.其实要想实现同一台机器部署 ...

  10. javascript中数组的map方法

    map方法原型:array1.map(callbackfn[, thisArg]) 参数: array1,必选. 一个数组对象.该函数一般用于数组对象 callbackfn,必选. 最多可以接受三个参 ...