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()编码转换函数用法示例
PHP iconv()字符编码转换函数的用法,iconv()函数,在php5中是内置的,语法格式:iconv("UTF- 8","GB2312//IGNORE" ...
- iconv编码转换指令
看到一个不错的指令iconv,可以对文件编码进行转换,记录如下: iconv --list 列出所有支持转换的编码 icon -f code1 -t code2 filename -o newfile ...
- iconv编码转换
环境:cocos2dx 3.10 1.vs环境下编译windows版本,需要增加头文件和链接库①cocos2d-x-3.10\external\win32-specific\icon\include② ...
- iconv编码转换报错问题
今天,再由ISO-8859编码格式转化为UTF-8格式过程中,出现报错:iconv: 未知 10304 处的非法输入序列. 问题分析:ISO-8859是英文格式的编码方式,不支持中文,为了解决中文支持 ...
- GBK、UTF8、UNICODE编码转换
string GBKToUTF8(const std::string& strGBK) { , strGBK.c_str(), -, NULL, ); WCHAR * wszUTF8 = ne ...
- UTF-8和GBK编码转换iconv
iconv("GBK", "UTF-8", $str);//将GBK编码转换成UTF8编码
- iconv字符编码转换
转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...
- (转)PHP下编码转换函数mb_convert_encoding与iconv的使用说明
之--http://www.jb51.net/article/21451.htm mb_convert_encoding这个函数是用来转换编码的.原来一直对程序编码这一概念不理解,不过现在好像有点开窍 ...
- PHP下编码转换函数mb_convert_encoding与iconv的使用说明
mb_convert_encoding这个函数是用来转换编码的. 不过英文一般不会存在编码问题,只有中文数据才会有这个问题.比如你用Zend Studio或Editplus写程序时,用的是gbk编码, ...
随机推荐
- There is no Action mapped for namespace [/] and action name [updateUser] associated with context path [].
在使用Struts2的时候,遇到了这个问题. 原因分析: 找不到指定的路径, 那么就是struts.xml的内容问题, 或者是struts.xml的文件位置存在问题. struts2默认是应该放在sr ...
- 日常[系统]:Linux新人报到(吐槽%&%……&¥……%
昨天换了系统,从win7换到了NOIP必须面对的Linux系统. 不得不说,真的很不适应.原本右上角的三个按钮变到了左上角. 可爱的DEVCPP被无情的抛弃了. 又用不惯guide,只好用文本编辑器写 ...
- 【简●解】[HAOI2007] 理想的正方形
[简●解][HAOI2007] 理想的正方形 可恶的\(DP\). [题目大意] 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值 ...
- mysql多字段组合删除重复行
DELETEFROM boll_paramWHERE id in ( SELECT a.id FROM ( SELECT id FROM boll_param WHERE (symbol, time_ ...
- 洛谷 1067 NOIP2009 普及组 多项式输出
[题解] 一道简单的模拟题.需要判一些特殊情况:第一项的正号不用输出,x的一次项不用输出指数,系数为0的项不用输出等等,稍微细心一下就好. #include<cstdio> #includ ...
- 【HIHOCODER 1320】压缩字符串(区间DP)
描述 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示.例如AAAAAAAAAABABABCCD可以用10(A)2( ...
- SVN服务器的部署与安装
需要下载并安装VisualSVN,TortoiseSVN,VisualSVN-Server三个工具. 其中VisualSVN是SVN针对VisualStudio的插件: TortoiseSVN是客户端 ...
- spring boot学习01【搭建环境、创建第一个spring boot项目】
1.给eclipse安装spring boot插件 Eclipse中安装Spring工具套件(STS): Help -> Eclipse Marketplace... 在Search标签或者Po ...
- zoj 2807 Electrical Outlets
Electrical Outlets Time Limit: 2 Seconds Memory Limit: 65536 KB Roy has just moved into a new a ...
- Thread 1 cannot allocate new log 的处理办法
ALTER SYSTEM ARCHIVE LOG Thread 1 cannot allocate new log, sequence 2594 Checkpoint not complete 这个实 ...