gbk转utf-8 iconv 编码转换
来源:互联网 发布:山治两年后的实力知乎 编辑:程序博客网 时间:2024/04/30 04:24
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; //注意这里的返回是重点}
0 0
- gbk转utf-8 iconv 编码转换
- iconv转换编码格式 gbk utf-8
- PHP中的GBK与UTF-8等字符串编码形式的自由转换工具iconv
- android NDK添加iconv支持,支持GBK UTF-8编码转换
- linux-利用iconv批量转换GBK文件到UTF-8编码方法
- 简要介绍一下UTF-8编码和GBK编码------并利用linux中的iconv命令来实现UTF-8和GBK之间的相互转换
- Linux iconv GBK和UTF-8之间的转换
- php中iconv函数使用方法 php 字符集转换 GBK 转 UTF-8
- linux下使用iconv转换编码:UTF8转GBK
- Android字符编码转换,GBK转UTF-8
- 【转】ios字符串编码转换(utf-8 & gbk)问题
- MySQL GBK→UTF-8编码转换
- 编码转换:UTF-8 BOM to GBK
- linux C gbk utf-8编码转换
- linux C gbk utf-8编码转换
- linux C gbk utf-8编码转换
- UNICODE, GBK, UTF-8编码的转换
- linux C gbk utf-8编码转换
- BestCoder Round #48
- hdoj 3836 Equivalent Sets 【tarjan 求SCC + 缩点】
- 51nod 1090 3个数和为0
- wpf 中的Canvas与Inkcanvas的属性说明
- 神经网络
- gbk转utf-8 iconv 编码转换
- 广义线性回归拟合教程和源码
- ZOJ 1003 Crashing Balloon
- Navicat Premium11.0.16 for mac 破解
- boost之variant使用
- JavaScript匿名函数与闭包
- 排序算法之归并排序
- ZOJ 1940 Dungeon Master
- AYIT暑假集训大二第一周周六赛 B - 汉字统计