linux文件字符集转换(utf8-gb2312)
一,命令行
在LINUX上进行编码转换时,可以利用iconv命令实现,这是针对文件的,即将指定文件从一种编码转换为另一种编码。
iconv命令用法如下:
iconv [选项...] [文件...]
1.输入/输出格式规范:
-f, --from-code=名称 原始文本编码
-t, --to-code=名称 输出编码
2.列举所有已知的字符集 -l, --list
3.输出控制:
-c 从输出中忽略无效的字符
-o, --output=FILE 输出文件
-s, --silent 关闭警告
--verbose 打印进度信息
例子:
iconv -f utf-8 -t gb2312 /server_test/reports/software_.txt > /server_test/reports/software_asserts.txt
二,函数运用
1.头文件
#include <iconv.h>
2.函数
(1) iconv_t iconv_open(const char *tocode, const char *fromcode);
此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。
(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);
此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。
(3) int iconv_close(iconv_t cd);
此函数用于关闭转换句柄,释放资源。
3.例子: 用C语言实现的转换示例程序
#include "stdio.h"
#include "string.h"
#include "iconv.h"
#include "stdlib.h" static int charset_convert(const char *from_charset, const char *to_charset,
char *in_buf, size_t in_left, char *out_buf, size_t out_left)
{
iconv_t icd = (iconv_t)-1;
size_t sRet = -1;
char *pIn = in_buf;
char *pOut = out_buf;
size_t outLen = out_left; if (NULL == from_charset || NULL == to_charset || NULL == in_buf || 0 >= in_left || NULL == out_buf || 0 >= out_left)
{
return -1;
} icd = iconv_open(to_charset, from_charset);
if ((iconv_t)-1 == icd)
{
return -1;
} sRet = iconv(icd, &pIn, &in_left, &pOut, &out_left);
if ((size_t)-1 == sRet)
{
iconv_close(icd);
return -1;
} out_buf[outLen - out_left] = 0;
iconv_close(icd);
return (int)(outLen - out_left);
} static int charset_convert_UTF8_TO_GB2312(char *in_buf, size_t in_left, char *out_buf, size_t out_left)
{
return charset_convert("UTF-8", "GB2312", in_buf, in_left, out_buf, out_left);
} static int charset_convert_GB2312_TO_UTF8(char *in_buf, size_t in_left, char *out_buf, size_t out_left)
{
return charset_convert("GB2312-8", "UTF-8", in_buf, in_left, out_buf, out_left);
} int main()
{
char *pIn = "hello 中国人";
char *pOut = NULL;
size_t outLen = 0;
size_t inLen = 0;
int iRet = -1; inLen = strlen(pIn);
outLen = inLen * 3;
pOut = (char *)malloc(sizeof(char) * outLen);
if (NULL == pOut)
{
return -1;
}
memset(pOut, 0, sizeof(char) * outLen); iRet = charset_convert_UTF8_TO_GB2312(pIn, (size_t)inLen, pOut, (size_t)inLen);
if (-1 == iRet)
{
return -1;
} printf("out = %s;\touLen = %d\n", pOut, iRet);
free(pOut);
pOut = NULL;
return 0;
}
参考:http://blog.csdn.net/jnbbwyth/article/details/6991371
linux文件字符集转换(utf8-gb2312)的更多相关文章
- Linux字符编码转换 UTF8转GB3212
在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码. 一.利用iconv函数族进行编 ...
- java(IO)读写文件乱码转换UTF-8问题
java(IO)读写文件乱码转换UTF-8问题 读取文件 String Content = ""; // 文件很长的话建议使用StringBuffer try { FileInpu ...
- windows linux 文件编码转换
查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接查看文件编码:set fileencoding即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决用Vi ...
- Linux 文件编码格式转换
如果需要在Linux 中操作windows下的文件,那么经常遇到文件编码转换的问题. Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-. 查看文件编码 在vim 中 ...
- PHP 将字符串转换为字符集格式UTF8/GB2312/GBK 函数iconv()
iconv()介绍 iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件 iconv('要转化的格式',‘转化后的格式’,‘转化的数据’); 但是转化是经常出错,一般需要在转成的编码 ...
- linux的字符集转换
命令查看编码类型 查看命令参数 查看支持的字符集 将文件转换成utf-8 的文件(经测试比较鸡肋,不好用) [root@ag-1 hh]# iconv oldboy -f us-ascii -t ut ...
- windows和linux文件的转换
由于windows与unix系统的换行不一致,因此需要相互之前的格式转换 只需要在linux上执行 dos2unix filename 将windows下的文本文件转换成linux上可以浏览的文件 u ...
- IO流实现GBK写入文件然后转换UTF-8
public static void main(String[] args) throws IOException { File file = new File("olol\\a.txt&q ...
- 在Vim中查看文件编码和文件编码转换
在Vim中查看文件编码和文件编码转换 风亡小窝 关注 0.2 2016.09.26 22:43* 字数 244 阅读 5663评论 0喜欢 2 在Vim中查看文件编码 :set fileencodi ...
随机推荐
- unity3d___UGui中如何创建loading...进度条
http://blog.sina.com.cn/s/blog_e82e8c390102wh2z.html 实现方法:通过Image组件中Image Type属性中Fill Amount,通过代码改变F ...
- J2EE分布式服务基础之RPC
一.RPC介绍 什么是RPC 远程过程调用(RPC)是一个协议,程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需知道网络细节. RPC模型 C/S模式 基于传输层协议 (例如 TCP/I ...
- 关于本地模块安装入maven仓库出现的异常
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.9.RELEASE:repackage (de ...
- gitlab init project
Command line instructions Git global setup git config --global user.name "zxpo" git config ...
- TCP状态详解
CLOSED: 这个没什么好说的了,表示初始状态. LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了. SYN_RCV ...
- LeetCode第一题:Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- hihoCoder#1139(二分+bfs)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回和上上回里我们知道Nettle在玩<艦これ>,Nettle在整理好舰队之后终于准备出海捞船和敌军交战了 ...
- Unreal Engine 4 Radiant UI 入门教程(一)制作Radiant HUD
请注意:本篇教程的编号是从零开始的,如果没有看第零篇教程,请前往学习. 本教程介绍如何制作Radiant HUD,这是指将网页元素直接加入到HUD中,效果为: 对应的网页元素为: 第一步: 将之前下载 ...
- Centos 7.2 编译安装 git
一. 下载最新版GIT安装包: https://www.kernel.org/pub/software/scm/git/ 选择想要安装的版本,下载,解压 命令: .tar.gz $ cd git- 二 ...
- C# Remoting 简单实现
此处下载源代码(VS2010编译通过) http://files.cnblogs.com/files/qqhfeng/%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8%E6 ...