关于Unicode&UTF-8&ANSI的相互转换(Ver1.1)
2014-04-04 09:38
465 查看
Ver1.1
原因
Ver1.0的函数用起来总是很麻烦,先要定义一个pTarget的指针,然后将起地址传进来,更方便的写法是pTarget = fun(char*)的形式,但是为了兼容以前的代码,修改为以下:代码
wchar_t* AnsiToUnicode(char* pSrc, wchar_t** ppTarget /* = NULL */) { if (!pSrc) return NULL; int wcsLen = ::MultiByteToWideChar(CP_ACP, 0, pSrc, strlen(pSrc), NULL, 0); wchar_t* wszString = new wchar_t[wcsLen + 1]; ::MultiByteToWideChar(CP_ACP, NULL, pSrc, strlen(pSrc), wszString, wcsLen); wszString[wcsLen] = '\0'; if (NULL != ppTarget) *ppTarget = wszString; return wszString; } char* UnicodeToAnsi(wchar_t* pSrc, char** ppTarget /* = NULL */) { if (!pSrc) return NULL; int aLen = ::WideCharToMultiByte(CP_ACP, 0, pSrc, wcslen(pSrc), NULL, 0, NULL, NULL); char* pChar = new char[aLen + 1]; ::WideCharToMultiByte(CP_ACP, 0, pSrc, wcslen(pSrc), pChar, aLen, NULL, NULL); pChar[aLen] = '\0'; if (NULL != ppTarget) *ppTarget = pChar; return pChar; } wchar_t* Utf8ToUnicode(char* pSrc, wchar_t** ppTarget /* = NULL */) { if (!pSrc) return NULL; int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, pSrc, strlen(pSrc), NULL, 0); wchar_t* wszString = new wchar_t[wcsLen + 1]; ::MultiByteToWideChar(CP_UTF8, NULL, pSrc, strlen(pSrc), wszString, wcsLen); wszString[wcsLen] = '\0'; if (NULL != ppTarget) *ppTarget = wszString; return wszString; } char* UnicodeToUtf8(wchar_t* pSrc, char** ppTarget /* = NULL */) { if (!pSrc) return NULL; int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, pSrc, wcslen(pSrc), NULL, 0, NULL, NULL); char* szU8 = new char[u8Len + 1]; ::WideCharToMultiByte(CP_UTF8, NULL, pSrc, wcslen(pSrc), szU8, u8Len, NULL, NULL); szU8[u8Len] = '\0'; if (NULL != ppTarget) *ppTarget = szU8; return szU8; }
Ver1.0
void AnsiToUnicode(char* pSrc, wchar_t** ppTarget) { if (!pSrc) return; int wcsLen = ::MultiByteToWideChar(CP_ACP, 0, pSrc, strlen(pSrc), NULL, 0); wchar_t* wszString = new wchar_t[wcsLen + 1]; ::MultiByteToWideChar(CP_ACP, NULL, pSrc, strlen(pSrc), wszString, wcsLen); wszString[wcsLen] = '\0'; *ppTarget = wszString; } void UnicodeToAnsi(wchar_t* pSrc, char** ppTarget) { if (!pSrc) return; int aLen = ::WideCharToMultiByte(CP_ACP, 0, pSrc, wcslen(pSrc), NULL, 0, NULL, NULL); char* pChar = new char[aLen + 1]; ::WideCharToMultiByte(CP_ACP, 0, pSrc, wcslen(pSrc), pChar, aLen, NULL, NULL); pChar[aLen] = '\0'; *ppTarget = pChar; } void Utf8ToUnicode(char* pSrc, wchar_t** ppTarget) { if (!pSrc) return; int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, pSrc, strlen(pSrc), NULL, 0); wchar_t* wszString = new wchar_t[wcsLen + 1]; ::MultiByteToWideChar(CP_UTF8, NULL, pSrc, strlen(pSrc), wszString, wcsLen); wszString[wcsLen] = '\0'; *ppTarget = wszString; } void UnicodeToUtf8(wchar_t* pSrc, char** ppTarget) { if (!pSrc) return; int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, pSrc, wcslen(pSrc), NULL, 0, NULL, NULL); char* szU8 = new char[u8Len + 1]; ::WideCharToMultiByte(CP_UTF8, NULL, pSrc, wcslen(pSrc), szU8, u8Len, NULL, NULL); szU8[u8Len] = '\0'; *ppTarget = szU8; }
使用完成后需在函数外单独释放pTarget
相关文章推荐
- 关于ANSI和Unicode、Unicode和UTF-8等的相互转换
- ANSI,UNICODE, UTF-8 字符串之间的相互转换
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- Ansi,Unicode(little endian),Unicode big endian,UTF-8编码文件相互转换
- ANSI、UNICODE、UTF-8编码格式相互之间转换
- ansi unicode utf-8相互转换
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- ANSI,UNICODE, UTF-8 字符串之间的相互转换
- unicode、utf-8、ansi的故事及其相互转换
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
- unicode、utf-8、ansi的故事及其相互转换
- 关于ANSI,unicode与utf-8的区别
- 关于编码ansi、GB2312、unicode与utf-8的区别
- UTF-8与Unicode字符的相互转换 与 16进制Unicode转换汉字
- unicode utf-8 gb2312编码 使用C++相互转换的代码
- 关于混排文本修改转换系列问题--ASCII & UniCode
- 关于编码ansi、GB2312、unicode与utf-8的区别
- JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换