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 编码转换相关推荐

  1. php iconv #039;cp936#039; 转gbk,php cp936转utf8编码转换乱码问题的解决方案

    php cp936转utf8中文编码转换汉字乱码问题的解决方案 今天遇到个问题, 中文字符串 如  åç°ä»£è½»å¥¢å ¨éåç 需要转换为 UTF8,就调用了PHP的函数, mb_conve ...

  2. linux下iconv编码转换的用法

     一共需要三步: 1. iconv_t iconv_open(const char *tocode, const char *fromcode);    //用这个函数获得句柄(iconv类型的返 ...

  3. iconv 编码转换

    **使用iconv 转换utf-8到gb2312的时候出现 iconv Invalid or incomplete multibyte or wide character 错误 ** 将gb2312换 ...

  4. c语言iconv转码错误,iconv编码转换的问题

    在网上有如下代码: /*代码转换:从一种编码转为另一种编码*/ int code_convert(const char *from_charset, const char *to_charset, c ...

  5. html转换编码格式,html编码转换 html编码设置utf gbk编码转换图文教程

    html编码转换 html编码设置utf gbk编码转换图文教程篇 常用HTML编码之urf-8编码转换为gb2312编码或者gb2312转换为utf-8编码快速转换设置,这里DIVCSS5介绍使用D ...

  6. iconv 判断字符编码_iconv字符编码转换全攻略

    iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以"方便"的完成几乎所有的编码转换工作.说简单是因为,它常用的 ...

  7. Linux C gbk utf-8编码转换

    2019独角兽企业重金招聘Python工程师标准>>> 用linux C 下的函数调用创建中文目录.文件等,字符串的编码格式要求是utf-8格式的. 那么如果linux C下如何进行 ...

  8. iconv 文件编码转换

    查了下iconv命令用法如下: iconv [选项...] [文件...] 有如下选项可用: 输入/输出格式规范: -f, --from-code=名称 原始文本编码 -t, --to-code=名称 ...

  9. ubuntu下txt文件编码转换、查询(gbk/ISO-8859-utf-8)

    在ubuntu下运行python程序,总是报错,说编码不对不是utf-8(貌似是因为汉字部分出问题了),搜集资料后完成了转换. 1.文件编码查询 $ file 199801.txt 199801.tx ...

最新文章

  1. Android客户端与服务器之间的通信
  2. SAP API Business Hub 上测试 API 的一些常见问题
  3. 快速幂(二进制理解)
  4. The minimum required Cuda capability is 3.7.
  5. 软件测试的出路到底在哪?
  6. 洛谷P1589 泥泞路
  7. 使用nat123动态解析公网ip
  8. Ubuntu1604 在startup 中添加开机自启动
  9. python数据挖掘课后题答案_中国大学MOOC《数据挖掘与python实践》章节答案
  10. C#中Obsolete特性
  11. KEIL5报错error: #67: expected a “}“
  12. 网易mumu模拟器去广告纯净版 v1.26.1.1
  13. Ubuntu 20.04安装GTX 1060显卡驱动+cuda 11.4 + cudnn 8,nvidia-smi 报错:NVIDIA-SMI has failed
  14. 使用cookie防止恶意点击
  15. 坑人的vultr服务商,坑人的送$100活动
  16. lammps案例:npt系综练手,H2压缩模拟
  17. C++的4种智能指针剖析使用
  18. centos7 KVM网桥桥接、网卡绑定
  19. miui12解决twrp无法格式化data和乱码问题
  20. 大学生创新创业万学答案(三)

热门文章

  1. fragment里spinner值设定_口袋里的扭力扳手 Topeak Ratchet Rocket Lite NTX测评
  2. metasploit mysql_Metasploit渗透测试:选择模块
  3. php实现页面雪花效果,CSS3如何实现雪花飘落的效果
  4. 超级计算机开采金矿,科学家发现地球内部有超60万亿吨金矿,为什么没人敢开采?...
  5. word文档小方格怎么弄_word文档小方格怎么打勾
  6. PDF免费转word方法
  7. 你需要了解的HashMap、HashTable和ConcurrentHashMap的区别
  8. pyqt5使用label显示图片
  9. ubuntu16.04下出现登陆不进去
  10. Qt界面美化 QSS