命令行"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. xCode删除storyboard,新建window并启动

    application:didFinishLaunchingWithOptions该函数是应用程序启动之后首次加载页面的函数,删除storyboard之后,需要在这里new出新的window,初始化, ...

  2. Python基础(4)--字符串

    所有标准的序列操作对字符串都适用,但字符串是不可变的 本文地址:http://www.cnblogs.com/archimedes/p/python-string.html,转载请注明源地址. 字符串 ...

  3. 【读书笔记】iOS-装箱

    通常将一个基本类型的数据包装成对象叫做装箱,从对象中提取基本类型的数据叫做取消装箱.有些语言有自动装箱功能,它可以自动包装基本基础类型的数据,也可以自动从包装后的对象中提取基础数据.Objective ...

  4. UISearchBar改变搜索框的高度

    系统的searchBar UISearchBar的中子控件及其布局 UIView(直接子控件) frame 等于 searchBar的bounds,view的子控件及其布局 UISearchBarBa ...

  5. LeetCode 5 Longest Palindromic Substring(最长子序列)

    题目来源:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest ...

  6. Linux写时拷贝技术(copy-on-write)

    COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内 ...

  7. 邮件群发工具(C#版)

    引言 经常会参与组织一些社区活动,涉及到和不同的人进行交流,微信当然是必须的,同样邮件也是一种不可或缺的方式. 一般群发的邮件不是很友好,如果是一对一的,收到邮件的人是不是会比较重视,而且还有他的名字 ...

  8. 使用TRACE时 输出 _CrtDbgReport: String too long or IO Error

    在VS2010中使用MFC,使用UNICODE 调用TRACE,输出_CrtDbgReport: String too long or IO Error 可尝试使用OutputDebugString函 ...

  9. Solr与HBase架构设计

    摘要:本篇是本人在做一个大数据项目时,对于系统架构的一点总结,如何在保证存储量的情况下,又能保证数据的检索速度. 前提:      Solr.SolrCloud提供了一整套的数据检索方案,HBase提 ...

  10. MCS51系列单片机实用技术部分课件