gbk转utf-8 iconv 编码转换
linux下面有时候 字符需要进行编码转换(爬虫将gbk转为utf-8编码...),一般可以选择iconv函数。
终端下面 输入
man 3 iconv
得到 iconv函数的使用方法。
个人看习惯了,msdn文档之后感觉linux下面的文档的看的不是那么爽了。
使用iconv函数进行转码,一般使用三个函数:iconv_open 、 iconv 、iconv_close三个函数。
iconv_t iconv_open(const char* tocode,const char* fromcode)
返回值类似文件句柄的东西,tococode:目标编码,fromcode:来源编码。
终端下面输入下面命令得到系统支持的编码:
iconv --list
然后就是转码函数了:
size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft,char **outbuf, size_t *outbytesleft);
cd:刚才iconv_open得到的句柄, inbuf: 需要转码的字符串地址的指针 , inbytesleft:需要转码的长度,outbuf:输出空间 , outbytesleft:剩余空间
具体函数内容可以查看这个网页iconv_open iconv iconv_close函数文档
使用完成之后,需要关闭之前打开的句柄 :
int iconv_close(iconv_t cd);
例子:
头文件:CTranstlateString.h
#ifndef CTRANSTLATESTRING_H
#define CTRANSTLATESTRING_H
#include <string>
#include <iostream>
#include <iconv.h>class CTranstlateString
{
public:CTranstlateString(const char *to_encode , const char *from_encode);const char* Translate(const char* from, size_t flen); //字符串转换virtual ~CTranstlateString();
protected:
private:char* fromstring; //字符串char* tostring; //size_t fromleng;//带转换字符串预备长度size_t toleng; //iconv_t handle;const char* InTranlsate(); //正真的字符串函数
};#endif // CTRANSTLATESTRING_H
文件:CTranstlateString.cpp
#include <string.h>
#include "CTranstlateString.h"
using namespace std;CTranstlateString::CTranstlateString(const char *to_encode , const char *from_encode)
{fromstring = new char[1];fromleng = 1;tostring = new char[1];toleng = 1;handle = iconv_open( to_encode , from_encode );
}CTranstlateString::~CTranstlateString()
{delete[] fromstring;fromleng = 0;delete[] tostring;toleng = 0;iconv_close(handle);
}const char* CTranstlateString::Translate(const char* from ,size_t flen)
{if( fromleng < flen+1 ) //将待 编码的字符串 存储起来{delete[] fromstring;fromstring = NULL;fromleng = 0;try{fromstring = new char[flen+1];fromleng = flen + 1;}catch(...){fromstring = NULL;fromleng = 0 ;return NULL;}}memset( fromstring , 0 , fromleng );memcpy(fromstring, from, fromleng);size_t tlen = flen * 2;//分类 编码后的字符串空间if( toleng < tlen +1 ){delete[] tostring;tostring = NULL;toleng = 0;try{tostring = new char[tlen + 1];toleng = tlen + 1;}catch (...){tostring = NULL;toleng = 0;return NULL;}}memset(tostring, 0, toleng);return InTranlsate(); //字符串转码
}const char* CTranstlateString::InTranlsate()
{size_t outlen = toleng ;char *inbuf = fromstring;char *outbuf = tostring ;size_t inlen = fromleng;if ( -1 == iconv( handle ,&inbuf , &inlen , &outbuf , &outlen ) ){return "";}return tostring; //注意这里的返回是重点
}
gbk转utf-8 iconv 编码转换相关推荐
- php iconv #039;cp936#039; 转gbk,php cp936转utf8编码转换乱码问题的解决方案
php cp936转utf8中文编码转换汉字乱码问题的解决方案 今天遇到个问题, 中文字符串 如 åç°ä»£è½»å¥¢å ¨éåç 需要转换为 UTF8,就调用了PHP的函数, mb_conve ...
- linux下iconv编码转换的用法
一共需要三步: 1. iconv_t iconv_open(const char *tocode, const char *fromcode); //用这个函数获得句柄(iconv类型的返 ...
- iconv 编码转换
**使用iconv 转换utf-8到gb2312的时候出现 iconv Invalid or incomplete multibyte or wide character 错误 ** 将gb2312换 ...
- c语言iconv转码错误,iconv编码转换的问题
在网上有如下代码: /*代码转换:从一种编码转为另一种编码*/ int code_convert(const char *from_charset, const char *to_charset, c ...
- html转换编码格式,html编码转换 html编码设置utf gbk编码转换图文教程
html编码转换 html编码设置utf gbk编码转换图文教程篇 常用HTML编码之urf-8编码转换为gb2312编码或者gb2312转换为utf-8编码快速转换设置,这里DIVCSS5介绍使用D ...
- iconv 判断字符编码_iconv字符编码转换全攻略
iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以"方便"的完成几乎所有的编码转换工作.说简单是因为,它常用的 ...
- Linux C gbk utf-8编码转换
2019独角兽企业重金招聘Python工程师标准>>> 用linux C 下的函数调用创建中文目录.文件等,字符串的编码格式要求是utf-8格式的. 那么如果linux C下如何进行 ...
- iconv 文件编码转换
查了下iconv命令用法如下: iconv [选项...] [文件...] 有如下选项可用: 输入/输出格式规范: -f, --from-code=名称 原始文本编码 -t, --to-code=名称 ...
- ubuntu下txt文件编码转换、查询(gbk/ISO-8859-utf-8)
在ubuntu下运行python程序,总是报错,说编码不对不是utf-8(貌似是因为汉字部分出问题了),搜集资料后完成了转换. 1.文件编码查询 $ file 199801.txt 199801.tx ...
最新文章
- Android客户端与服务器之间的通信
- SAP API Business Hub 上测试 API 的一些常见问题
- 快速幂(二进制理解)
- The minimum required Cuda capability is 3.7.
- 软件测试的出路到底在哪?
- 洛谷P1589 泥泞路
- 使用nat123动态解析公网ip
- Ubuntu1604 在startup 中添加开机自启动
- python数据挖掘课后题答案_中国大学MOOC《数据挖掘与python实践》章节答案
- C#中Obsolete特性
- KEIL5报错error: #67: expected a “}“
- 网易mumu模拟器去广告纯净版 v1.26.1.1
- Ubuntu 20.04安装GTX 1060显卡驱动+cuda 11.4 + cudnn 8,nvidia-smi 报错:NVIDIA-SMI has failed
- 使用cookie防止恶意点击
- 坑人的vultr服务商,坑人的送$100活动
- lammps案例:npt系综练手,H2压缩模拟
- C++的4种智能指针剖析使用
- centos7 KVM网桥桥接、网卡绑定
- miui12解决twrp无法格式化data和乱码问题
- 大学生创新创业万学答案(三)
热门文章
- fragment里spinner值设定_口袋里的扭力扳手 Topeak Ratchet Rocket Lite NTX测评
- metasploit mysql_Metasploit渗透测试:选择模块
- php实现页面雪花效果,CSS3如何实现雪花飘落的效果
- 超级计算机开采金矿,科学家发现地球内部有超60万亿吨金矿,为什么没人敢开采?...
- word文档小方格怎么弄_word文档小方格怎么打勾
- PDF免费转word方法
- 你需要了解的HashMap、HashTable和ConcurrentHashMap的区别
- pyqt5使用label显示图片
- ubuntu16.04下出现登陆不进去
- Qt界面美化 QSS