您的位置:首页 > 其它

自己实现的一个字符串编码类型转换的类(VC)

2013-05-15 23:02 453 查看
/*
zhouciming@163.com	2013/05/15 23:00
EncodeUtility.h
*/

#ifndef _CENCODEUTILITY_H_
#define _CENCODEUTILITY_H_

#include <string>

using namespace std;

class CEncodeUtility
{
public:
static wstring ConvertAnsi2Unicode(const string &src);
static string ConvertUnicode2Ansi(const wstring &src);
static string ConvertUnicode2UTF8(const wstring &src);
static wstring ConvertUTF8toUnicode(const string &src);
static string ConvertAnsi2UTF8(const string &src);
static string ConvertUTF8toAnsi(const string &src);
};

#endif


/*
zhouciming@163.com	2013/05/15 23:00
EncodeUtility.cpp
*/

#include <windows.h>
#include "EncodeUtility.h"

/*
Type:
Ansi-String: 	string		szAnsi
Unicode-String:	wstring		wszString
UTF8-String:	string		szU8
*/
wstring CEncodeUtility::ConvertAnsi2Unicode(const string &src)
{
wstring ret;

const char *szAnsi = src.c_str();
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);	//预转换,得到所需空间的大小
wchar_t* wszString = new wchar_t[wcsLen+1];
::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);
wszString[wcsLen] = '\0';
ret = wszString;
delete[] wszString;
wszString = NULL;

return ret;
}

string CEncodeUtility::ConvertUnicode2Ansi(const wstring &src)
{
string ret;

const wchar_t* wszString = src.c_str();
int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
char* szAnsi = new char[ansiLen+1];
::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
szAnsi[ansiLen] = '\0';
ret = szAnsi;
delete[] szAnsi;
szAnsi = NULL;

return ret;
}

string CEncodeUtility::ConvertUnicode2UTF8(const wstring &src)
{
string ret;
const wchar_t* wszString = src.c_str();
int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
char* szU8 = new char[u8Len+1];
::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), szU8, u8Len, NULL, NULL);
szU8[u8Len] = '\0';
ret = szU8;
delete[] szU8;
szU8 = NULL;

return ret;
}

wstring CEncodeUtility::ConvertUTF8toUnicode(const string &src)
{
wstring ret;

const char* szU8 = src.c_str();
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen+1];
::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);
wszString[wcsLen] = '\0';
ret = wszString;
delete []wszString;
wszString = NULL;

return ret;
}

string CEncodeUtility::ConvertAnsi2UTF8(const string &src)
{
wstring tmp = ConvertAnsi2Unicode(src);
return ConvertUnicode2UTF8(tmp);
}

string CEncodeUtility::ConvertUTF8toAnsi(const string &src)
{
wstring tmp = ConvertUTF8toUnicode(src);
return ConvertUnicode2Ansi(tmp);
}


因为考虑到这主要用在c++编程环境,所以参数表中多数用的是string,而不是char[]

这个类主要可以应用在vc平台!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐