⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 charsetconverter.cc

📁 著名的标准C++的html解析器
💻 CC
字号:
#include <cstdio>#include <cerrno>#include "CharsetConverter.h"using namespace std;using namespace htmlcxx;CharsetConverter::CharsetConverter(const string &from, const string &to) throw (Exception){	mIconvDescriptor = iconv_open(from.c_str(), to.c_str());	if (mIconvDescriptor == (iconv_t)(-1))	{		const char *error_str = strerror(errno);		int size = strlen(error_str) + from.length() + to.length() + 26;		char error[size];		snprintf(error, size, "Can't convert from %s to %s: %s", from.c_str(), to.c_str(), error_str);		throw Exception(error);	}}CharsetConverter::~CharsetConverter(){	iconv_close(mIconvDescriptor);}string CharsetConverter::convert(const string &input){	const char *inbuf = input.c_str();	size_t inbytesleft = input.length();	size_t outbuf_len = input.length();	char *outbuf_start = new char[outbuf_len];	char *outbuf = outbuf_start;	size_t outbytesleft = outbuf_len;	size_t ret;	while (1) {		ret = iconv(mIconvDescriptor, const_cast<char**>(&inbuf), &inbytesleft, &outbuf, &outbytesleft);		if (ret == 0) break;		if (ret == (size_t)-1 && errno == E2BIG) return string();		//				fprintf(stderr, "invalid byte: %d\n", inbuf - input.c_str());		inbuf++; inbytesleft--;	}	string out(outbuf_start, outbuf_len - outbytesleft);	delete [] outbuf_start;	return out;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -