[Linux系统编程]将GBK转换成UTF-8
2015-01-16 15:59
639 查看
1.编码简单介绍
Windows下的中文一般都为GBK或者GB2312编码,而Linux下默认采用UTF-8编码,因为编码的不同就会导致乱码。对于GBK/GB2312来说,一个中文字是占两个字节;对于UFT-8来说,一个中文字是占三个字节。
GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。
2.编码转换方法
Linux下通过iconv_open, iconv, iconv_close三个函数即可完成编码的转化。3.相关函数函数原型
iconv_open#include <iconv.h> iconv_t iconv_open( const char *tocode, /* 目标编码字符串,比如:"UTF-8" */ const char *fromcode /* 源编码字符串,比如:"GBK" */ ); /* 返回值: 成功返回一个转换描述符,失败返回(iconv_t)-1。(这里相当于一个强转) */
iconv
#include <iconv.h> size_t iconv(iconv_t cd, // 通过iconv_open函数返回的转换描述符 char **inbuf, // 输入缓存的地址 size_t *inbytesleft, // 输入缓存的大小 char **outbuf, // 输出缓存的地址 size_t *outbytesleft //输出缓存的大小 ); /* 返回值: 成功返回转换的字符数,失败返回(size_t)-1。(这里相当于一个强转) */
iconv_close
#include <iconv.h> int iconv_close( iconv_t cd // 通过iconv_open函数返回的转换描述符 ); /* 返回值: 成功返回0,失败返回-1。 */
4.示例代码
Linux下转换windows下写的一个txt文本文件,转换编码之后,在终端打印出来。#include <stdio.h> #include <iconv.h> #include <string.h> #include <errno.h> int gbk2utf8(char *src, size_t *srclen, char *dest, size_t *destlen) { iconv_t cd = iconv_open("UTF-8", "GBK"); if (cd == (iconv_t)-1) { printf("func iconv_open() err : %s\n", strerror(errno)); return -1; } size_t rc = iconv(cd, &src, srclen, &dest, destlen); if (rc == (size_t)-1) { printf("func iconv() err : %s\n", strerror(errno)); return -1; } iconv_close(cd); return 0; } int main(int argc, char *argv[]) { if (argc < 2) return -1; FILE *fp = fopen(argv[1], "r"); if (fp == NULL) { printf("func fopen() err : %s\n", strerror(errno)); return -2; } char buf[1024]; char destbuf[1024]; while (1) { memset(buf, 0, sizeof(buf)); memset(destbuf, 0, sizeof(destbuf)); if (fgets(buf, sizeof(buf), fp) == NULL) { break; } size_t srclen = strlen(buf); size_t destlen = sizeof(destbuf); gbk2utf8(buf, &srclen, destbuf, &destlen); printf("%s", destbuf); } fclose(fp); return 0; }
相关文章推荐
- linux 终端下utf-8 和gbk相互转换
- 简要介绍一下UTF-8编码和GBK编码------并利用linux中的iconv命令来实现UTF-8和GBK之间的相互转换
- Linux iconv GBK和UTF-8之间的转换
- dedeCMS等类似系统将gbk版本转换为utf-8版本(gbk to utf-8)
- Linux中将一个GBK编码的文件转换成UTF-8编码文件
- linux下gbk转换utf-8
- LINUX 转换文件编码 GBK->UTF-8文件编码批量转换脚本[zt]
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
- Linux系统C编程资料
- Linux系统下的多线程编程入门二
- Linux下的C编程实战(二)――文件系统编程 推荐
- 内码转换:以 GBK 编码到 UTF-8 编码为例
- utf-8转换GB3212或GBK
- Linux系统进程控制编程(六)——wait和waitpid函数
- 基于Linux系统的Socket编程简单介绍
- Linux系统下的多线程编程入门四
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换[引]
- Linux系统下C语言编程基础知识介绍
- Linux系统环境下的Socket编程详细解析 (1)