声明(Utilities.h):
#ifndef __UTILITIES_H__
#define __UTILITIES_H__
#include <string>
#include <sstream>
#include <iomanip>
#include <algorithm>
namespace Utilities
{
std::string StringUpper(const std::string& src);
std::wstring StringUpper(const std::wstring& src);
std::wstring ANSIToUnicode(const std::string& str);
std::string UnicodeToANSI(const std::wstring& str);
std::wstring UTF8ToUnicode(const std::string& str);
std::string UnicodeToUTF8(const std::wstring& str);
}
#endif //__UTILITIES_H__
定义(Utilities.cpp):
#include "stdafx.h"
#include "Utilities.h"
using namespace Utilities;
std::string Utilities::StringUpper(const std::string& src)
{
if( src.empty() )
{
return src;
}
std::vector<char> buffer(src.begin(), src.end());
buffer.push_back(0);
::CharUpperBuffA(&buffer.at(0), static_cast<DWORD>(src.size()));
return (&buffer.front());
}
std::wstring Utilities::StringUpper(const std::wstring& src)
{
if( src.empty() ) return src;
std::vector<wchar_t> buffer(src.begin(), src.end());
buffer.push_back(0);
::CharUpperBuffW(&buffer.at(0), static_cast<DWORD>(src.size()));
return (&buffer.front());
}
std::wstring Utilities::ANSIToUnicode(const std::string& str)
{
int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_ACP,
0,
str.c_str(),
-1,
NULL,
0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen + 1];
memset(pUnicode, 0, (unicodeLen + 1) * sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP,
0,
str.c_str(),
-1,
(LPWSTR)pUnicode,
unicodeLen);
std::wstring rt;
rt = (wchar_t*)pUnicode;
delete pUnicode;
return rt;
}
std::string Utilities::UnicodeToANSI(const std::wstring& str)
{
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_ACP,
0,
str.c_str(),
-1,
NULL,
0,
NULL,
NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char) * (iTextLen + 1));
::WideCharToMultiByte(CP_ACP,
0,
str.c_str(),
-1,
pElementText,
iTextLen,
NULL,
NULL);
std::string strText;
strText = pElementText;
delete[] pElementText;
return strText;
}
std::wstring Utilities::UTF8ToUnicode(const std::string& str)
{
int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_UTF8,
0,
str.c_str(),
-1,
NULL,
0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen + 1];
memset(pUnicode, 0, (unicodeLen + 1) * sizeof(wchar_t));
::MultiByteToWideChar(CP_UTF8,
0,
str.c_str(),
-1,
(LPWSTR)pUnicode,
unicodeLen);
std::wstring rt;
rt = (wchar_t*)pUnicode;
delete pUnicode;
return rt;
}
std::string Utilities::UnicodeToUTF8(const std::wstring& str)
{
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_UTF8,
0,
str.c_str(),
-1,
NULL,
0,
NULL,
NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char) * (iTextLen + 1));
::WideCharToMultiByte(CP_UTF8,
0,
str.c_str(),
-1,
pElementText,
iTextLen,
NULL,
NULL);
std::string strText;
strText = pElementText;
delete[] pElementText;
return strText;
}