自己实现的一个字符串编码类型转换的类(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平台!
相关文章推荐
- 把一个字符串转换成int类型(Java实现)
- C++中sprintf实现将一个基本数据类型的数组转换成字符串
- php中循环实现(字符串,对象,或者数组)编码相互转换
- 自己实现一个SQL解析引擎 功能:将用户输入的SQL语句序列转换为一个可执行的操作序列,并返回查询的结果集。 SQL的解析引擎包括查询编译与查询优化和查询的运行,主要包括3个步骤: 查询分析
- 【java基础】在Java中实现基本数据类型与字符、字符串之间的转换
- [Java] 自己实现字符串转换成整数
- char*数组(c类型字符串)和Vc++中的CString的转换,char*数组等问题
- 输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)
- java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- VC字符串类型CString,int,char*,string,wchar_t互相转换代码实例(转自闪电博客)
- 【原创】 VC++各种字符串类型转换
- C#中使用强制类型实现字符串和ASCII码之间的转换
- 在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换。
- C#中使用强制类型实现字符串和ASCII码之间的转换
- java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
- VC字符串类型CString,int,char*,string互相转换代码实例
- 给定一个字符串,请你将字符串重新编码 java实现
- VC中字符串类型的互相转换