charset convert

本文介绍了一个简单的字符集转换工具的实现方法,该工具利用iconv库进行不同字符集之间的转换,例如从UTF-8到GB2312。文章包含了完整的源代码实现,并通过一个示例展示了如何初始化转换器并执行实际的字符集转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/****************************************************************************
@File Name: convert.h
@Author: wangzhicheng
@mail: 2363702560@qq.com
@Created Time: Fri 24 Feb 2017 04:44:36 PM CST
			   2017-02-26
@Brief convert a kind of character set to another kind
****************************************************************************/
#ifndef CONVERT_H
#define CONVERT_H
#include <iconv.h>
#include <string>
namespace charset_convert
{
using namespace std;
static const int MAXLEN = 1024;
class Convert
{
private:
	iconv_t m_id;
public:
	Convert();
	~Convert();
	/*
	 * @brief init iconv 
	 * @return true if init ok
	 * */
	bool Init(const string &from_set, const string &to_set);
	/*
	 * @brief execute convertion
	 * @return true if convert ok
	 * */
	bool convert(const string &src, string &dest);
};
}
#endif

/****************************************************************************
@File Name: convert.cpp
@Author: wangzhicheng
@mail: 2363702560@qq.com
@Created Time: Fri 24 Feb 2017 04:44:36 PM CST
			   2017-02-26
@Brief convert a kind of character set to another kind
****************************************************************************/
#include "convert.h"
namespace charset_convert
{
Convert::Convert()
{
	m_id = 0;
}
/*
 * @brief init iconv 
 * @return true if init ok
 * */
bool Convert::Init(const string &from_set, const string &to_set)
{
	m_id = iconv_open(to_set.c_str(), from_set.c_str());

	return m_id;
}
/*
 * @brief execute convertion
 * @return true if convert ok
 * */
bool Convert::convert(const string &src, string &dest)
{
	size_t inlen = src.size();
	if(inlen > MAXLEN) return false;
	char *p_src = (char *)src.c_str();
	dest.assign(MAXLEN << 1, 0);
	size_t outlen = dest.size();
	char *p_dest = (char *)dest.c_str();
	if(iconv(m_id, &p_src, &inlen, &p_dest, &outlen) < 0) return false;
	if(inlen) return false;

	return true;
}
Convert::~Convert()
{
	if(m_id)
	{
		iconv_close(m_id);
		m_id = 0;
	}
}
}

/****************************************************************************
@File Name: test.cpp
@Author: wangzhicheng
@mail: 2363702560@qq.com
@Created Time: Fri 24 Feb 2017 05:02:03 PM CST
			   2017-02-26
****************************************************************************/
#include "convert.h"
#include <iostream>
using namespace charset_convert;
int main()
{
	 Convert convert;
	 if(!convert.Init("utf-8", "gb2312")) 
	 {
	 	cerr << "convert init failed...!" << endl;
		return -1;
	 }
	 string src = "I am linux...!";
	 string dest;
	 if(convert.convert(src, dest))
	 {
	 	cout << dest << endl;
		return 0;
	 }

	 return -1;
}

CC=g++
all:
	$(CC) -std=c++11 -g -o convertTest test.cpp convert.h convert.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值