linux文件字符集转换(utf8-gb2312)
来源:互联网 发布:如何关闭淘宝网店 编辑:程序博客网 时间:2024/04/27 23:39
一,命令行
在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
下面需求库文件请在嵌入式板子上面下载libiconv库
二,函数运用
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)
- 字符集GB2312判断及UTF8相互转换
- Linux下 GB2312和UTF8转换接口
- linux ICONV字符GB2312转换UTF8
- Linux utf8与gb2312转换函数
- Linux下 GB2312和UTF8转换接口
- Linux下转换字符集(UTF8转换) 借鉴此文自己已成功在LInux上实现gtk中 从UTF8到GB2312
- Linux下转换字符集(UTF8转换)(
- Linux下转换字符集(UTF8转换)
- linux C 字符集转换,UTF-8,GB2312
- linux C 字符集转换,UTF-8,GB2312
- UTF8 - GB2312转换
- UTF8、GB2312相互转换
- url 编码转换(utf8 - gb2312)
- url 编码转换(utf8 - gb2312)
- UTF8 到GB2312 的 转换
- GB2312和utf8编码转换
- js 编码转换 gb2312 & utf8
- [Leetcode]595.Big Countries
- 移动安全大讲堂:整体解决方案之iOS加密保护
- 计划----股票K线绘制MPAndroidChart[学习计划]
- 第六章javabean组件第一节引入组件目的
- phpMailer在本地可以发送邮件,服务器上不行
- linux文件字符集转换(utf8-gb2312)
- php里面传引用和传值的区别
- 1135. Is It A Red-Black Tree (30)[红黑树判断]
- 数值统计
- [转] QML
- vue2学习笔记——computed(计算属性)
- ODOO中数据库视图的支持
- QIIME Installation Guide
- kettle 错误处理