字符串处理代码主要处理各种字符编码之间的转换。
由unicode转换为utf-8,由utf-8转换为unicode,由unicode转换为ansi、由ansi转换为unicode,由utf-8转换为ansi,由ansi转换为utf-8.
头文件hisString.h代码如下:
#pragma once
/**
* @defgroup 字符串处理函数
* @brief 主要负责对各种编码字符串之间进行转换,注意:本版本不可以作为dll的导出函数使用,因为用到了string(主要是指MT运行时的dll)。
* @author 徐敏荣
* @date 2012-07-17
*
* @par 修订历史
* @version v0.5 \n
* @author 徐敏荣
* @date 2012-07-17
* @li 初始版本
* @{
*/
#include <string>
using namespace std;
namespace HisStr
{
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool u82uc(const char* str, wstring& content);
/**
* @brief 将unicode编码的字符串转换为utf-8编码的字符串。
* @param[in] str unicode编码的字符串
* @param[out] content utf-8编码的字符串
* @retval true:成功,false;失败
*/
bool uc2u8(const wchar_t* str, string& content);
/**
* @brief 将unicode编码的字符串转换为ansi编码的字符串。
* @param[in] str unicode编码的字符串
* @param[out] content ansi编码的字符串
* @retval true:成功,false;失败
*/
bool uc2as(const wchar_t* str, string& content);
/**
* @brief 将ansi编码的字符串转换为unicode编码的字符串。
* @param[in] str ansi编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool as2uc(const char* str, wstring& content);
/**
* @brief 将utf-8编码的字符串转换为ansi编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content ansi编码的字符串
* @retval true:成功,false;失败
*/
bool u82as(const char* str, string& content);
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool as2u8(const char* str, string& content);
}
namespace HisStrEx
{
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
wstring u82uc(const char* str);
/**
* @brief 将unicode编码的字符串转换为utf-8编码的字符串。
* @param[in] str ansi编码的字符串
* @retval utf-8编码的字符串
* @note 如果失败,返回""
*/
string uc2u8(const wchar_t* str);
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
string uc2as(const wchar_t* str);
/**
* @brief 将ansi编码的字符串转换为unicode编码的字符串。
* @param[in] str ansi编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
wstring as2uc(const char* str);
/**
* @brief 将utf-8编码的字符串转换为ansi编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval ansi编码的字符串
* @note 如果失败,返回""
*/
string u82as(const char* str);
/**
* @brief 将ansi编码的字符串转换为utf-8编码的字符串。
* @param[in] str ansi编码的字符串
* @retval utf-8编码的字符串
* @note 如果失败,返回""
*/
string as2u8(const char* str);
}
/**//** @}*/ // 字符串处理函数
/**
* @defgroup 字符串处理函数
* @brief 主要负责对各种编码字符串之间进行转换,注意:本版本不可以作为dll的导出函数使用,因为用到了string(主要是指MT运行时的dll)。
* @author 徐敏荣
* @date 2012-07-17
*
* @par 修订历史
* @version v0.5 \n
* @author 徐敏荣
* @date 2012-07-17
* @li 初始版本
* @{
*/
#include <string>
using namespace std;
namespace HisStr
{
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool u82uc(const char* str, wstring& content);
/**
* @brief 将unicode编码的字符串转换为utf-8编码的字符串。
* @param[in] str unicode编码的字符串
* @param[out] content utf-8编码的字符串
* @retval true:成功,false;失败
*/
bool uc2u8(const wchar_t* str, string& content);
/**
* @brief 将unicode编码的字符串转换为ansi编码的字符串。
* @param[in] str unicode编码的字符串
* @param[out] content ansi编码的字符串
* @retval true:成功,false;失败
*/
bool uc2as(const wchar_t* str, string& content);
/**
* @brief 将ansi编码的字符串转换为unicode编码的字符串。
* @param[in] str ansi编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool as2uc(const char* str, wstring& content);
/**
* @brief 将utf-8编码的字符串转换为ansi编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content ansi编码的字符串
* @retval true:成功,false;失败
*/
bool u82as(const char* str, string& content);
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @param[out] content unicode编码的字符串
* @retval true:成功,false;失败
*/
bool as2u8(const char* str, string& content);
}
namespace HisStrEx
{
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
wstring u82uc(const char* str);
/**
* @brief 将unicode编码的字符串转换为utf-8编码的字符串。
* @param[in] str ansi编码的字符串
* @retval utf-8编码的字符串
* @note 如果失败,返回""
*/
string uc2u8(const wchar_t* str);
/**
* @brief 将utf-8编码的字符串转换为unicode编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
string uc2as(const wchar_t* str);
/**
* @brief 将ansi编码的字符串转换为unicode编码的字符串。
* @param[in] str ansi编码的字符串
* @retval unicode编码的字符串
* @note 如果失败,返回""
*/
wstring as2uc(const char* str);
/**
* @brief 将utf-8编码的字符串转换为ansi编码的字符串。
* @param[in] str utf-8编码的字符串
* @retval ansi编码的字符串
* @note 如果失败,返回""
*/
string u82as(const char* str);
/**
* @brief 将ansi编码的字符串转换为utf-8编码的字符串。
* @param[in] str ansi编码的字符串
* @retval utf-8编码的字符串
* @note 如果失败,返回""
*/
string as2u8(const char* str);
}
/**//** @}*/ // 字符串处理函数
源文件hisString.cpp文件的代码:
#include "hiString.h"
#include <windows.h>
namespace HisStr
{
bool u82uc(const char* str, wstring& content)
{
int textlen ;
wchar_t * result;
textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 );
result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
::memset(result,0,(textlen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen);
content = result;
free(result);
return true;
}
bool uc2as(const wchar_t* str, string& content)
{
char* result;
int textlen;
textlen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
result =(char *)malloc((textlen+1)*sizeof(char));
memset( result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
content = result;
free(result);
return true;
}
bool u82as(const char* str, string& content)
{
wstring temp;
u82uc(str, temp);
return uc2as(temp.c_str(), content);
}
bool as2uc(const char* str, wstring& content)
{
int textlen ;
wchar_t * result;
textlen = MultiByteToWideChar(CP_ACP, 0, str,-1, NULL,0 );
result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
::memset(result,0,(textlen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0,str,-1,(LPWSTR)result,textlen);
content = result;
free(result);
return true;
}
bool uc2u8(const wchar_t* str, string& content)
{
char* result;
int textlen;
textlen = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL );
result =(char *)malloc((textlen+1)*sizeof(char));
memset( result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_UTF8, 0, str, -1, result, textlen, NULL, NULL );
content = result;
free(result);
return true;
}
bool as2u8(const char* str, string& content)
{
wstring temp;
as2uc(str, temp);
return uc2u8(temp.c_str(), content);
}
}
namespace HisStrEx
{
wstring u82uc(const char* str)
{
wstring temp;
if (HisStr::u82uc(str, temp))
{
return temp;
}
return L"";
}
string uc2as(const wchar_t* str)
{
string temp;
if (HisStr::uc2as(str, temp))
{
return temp;
}
return "";
}
string u82as(const char* str)
{
string temp;
if (HisStr::u82as(str, temp))
{
return temp;
}
return "";
}
string as2u8(const char* str)
{
string temp;
if (HisStr::as2u8(str, temp))
{
return temp;
}
return "";
}
wstring as2uc(const char* str)
{
wstring temp;
if (HisStr::as2uc(str, temp))
{
return temp;
}
return L"";
}
string uc2u8(const wchar_t* str)
{
string temp;
if (HisStr::uc2u8(str, temp))
{
return temp;
}
return "";
}
}
#include <windows.h>
namespace HisStr
{
bool u82uc(const char* str, wstring& content)
{
int textlen ;
wchar_t * result;
textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 );
result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
::memset(result,0,(textlen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen);
content = result;
free(result);
return true;
}
bool uc2as(const wchar_t* str, string& content)
{
char* result;
int textlen;
textlen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
result =(char *)malloc((textlen+1)*sizeof(char));
memset( result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
content = result;
free(result);
return true;
}
bool u82as(const char* str, string& content)
{
wstring temp;
u82uc(str, temp);
return uc2as(temp.c_str(), content);
}
bool as2uc(const char* str, wstring& content)
{
int textlen ;
wchar_t * result;
textlen = MultiByteToWideChar(CP_ACP, 0, str,-1, NULL,0 );
result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
::memset(result,0,(textlen+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0,str,-1,(LPWSTR)result,textlen);
content = result;
free(result);
return true;
}
bool uc2u8(const wchar_t* str, string& content)
{
char* result;
int textlen;
textlen = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL );
result =(char *)malloc((textlen+1)*sizeof(char));
memset( result, 0, sizeof(char) * ( textlen + 1 ) );
WideCharToMultiByte( CP_UTF8, 0, str, -1, result, textlen, NULL, NULL );
content = result;
free(result);
return true;
}
bool as2u8(const char* str, string& content)
{
wstring temp;
as2uc(str, temp);
return uc2u8(temp.c_str(), content);
}
}
namespace HisStrEx
{
wstring u82uc(const char* str)
{
wstring temp;
if (HisStr::u82uc(str, temp))
{
return temp;
}
return L"";
}
string uc2as(const wchar_t* str)
{
string temp;
if (HisStr::uc2as(str, temp))
{
return temp;
}
return "";
}
string u82as(const char* str)
{
string temp;
if (HisStr::u82as(str, temp))
{
return temp;
}
return "";
}
string as2u8(const char* str)
{
string temp;
if (HisStr::as2u8(str, temp))
{
return temp;
}
return "";
}
wstring as2uc(const char* str)
{
wstring temp;
if (HisStr::as2uc(str, temp))
{
return temp;
}
return L"";
}
string uc2u8(const wchar_t* str)
{
string temp;
if (HisStr::uc2u8(str, temp))
{
return temp;
}
return "";
}
}