命令行"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. Android环境的搭建

    一.Java环境的配置(以JDK1.7为例) 在环境变量下查看,查看是否存在JAVA_HOME,没有的话新建一个 JAVA_HOME:java安装目录下jdk的安装目录 Path:jdk目录下面的bi ...

  2. swift基础一

    // swift中导入类库使用import,不再使用<>和"" import Foundation // 输出 print("Hello, World!&qu ...

  3. 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

    一.第一种写法 package com.pb.demo1; import java.util.Scanner; /** * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字. ...

  4. iOS 杂笔-20(UIView和CALayer的区别与联系)

    iOS 杂笔-20(UIView和CALayer的区别与联系) 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提 ...

  5. iOS之 动态热修补技术JSPatch

    所谓动态热修补就是把能够导致app 崩溃的严重bug,提交新版本到appstore 审核速度太慢影响用户使用,这时候就可以利用 JSPatch 可以让你用 JavaScript 书写原生 iOS AP ...

  6. 转 Android学习 之 ColorStateList按钮文字变色

    Windows平台VC,对于不同的按钮状态,采用不同的颜色显示文字,实现起来比较复杂,一般都得自绘按钮.但是Android里面实现起来非常方便. 我们首先添加一个ColorStateList资源XML ...

  7. 在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证

    背景 创建需要通过Windows用户进行身份认证的Asp.net MVC应用 要点 在Asp.net MVC应用基于Windows用户进行身份认证的方法有很多,如MVC自带的Windows认证就经常被 ...

  8. ruby直接底层连接数据库

    class MysqlTest #Code here require "mysql" def testMysql dbc=Mysql.real_connect('localhost ...

  9. Effective Java 69 Prefer concurrency utilities to wait and notify

    Principle Use the higher-level concurrency utilities instead of wait and notify for easiness. Use Co ...

  10. Force.com平台基础--前言

    云计算平台 云计算模式有三种:(下面介绍来自百科) 1. SaaS:提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器.消费者不需要管理或控制任 ...