Unicode与Ansi及UTF8与Ansi之间的转换
2015-08-10 22:37
495 查看
char* UnicodeToAnsi(const wchar_t *szUnicode) { int nLenSrc=wcslen(szUnicode); int nLenDest = ::WideCharToMultiByte(CP_ACP,NULL,szUnicode,nLenSrc,NULL,0,NULL,NULL); if(nLenDest<=0) return NULL; char* pszDest = new char[nLenDest+1]; if (!pszDest) return NULL; memset(pszDest,0,(nLenDest+1)*sizeof(char)); ::WideCharToMultiByte(CP_ACP,NULL,szUnicode,nLenSrc,pszDest,nLenDest,NULL,NULL); return pszDest; } wchar_t* AnsiToUnicode(const char *szAnsi) { int nLenSrc = strlen(szAnsi); // 计算需要的宽字符数(MultiByteToWideChar的最后一个参数如果给0,则返回需要的宽字符数,包括末尾的'\0') // 如果第四个参数给-1,那么MultiByteToWideChar会自动计算szAnsi的长度 int nCharactersNumber =::MultiByteToWideChar(CP_ACP,0,szAnsi,nLenSrc,NULL,0); int nLenDest = nCharactersNumber * sizeof(wchar_t); wchar_t *pstrDest = new wchar_t[nLenDest]; if (!pstrDest) return NULL; wmemset(pstrDest,0,nLenDest); ::MultiByteToWideChar(CP_ACP,0,szAnsi,-1,pstrDest,nCharactersNumber); return pstrDest; } char* Utf8ToAnsi(const char *szUTF8) { int nLen = MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, NULL, NULL); LPWSTR lpwsz = new WCHAR[nLen]; MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, lpwsz, nLen); int nLen1 = WideCharToMultiByte(CP_ACP, 0, lpwsz, nLen, NULL, NULL, NULL, NULL); LPSTR lpsz = new CHAR[nLen1]; WideCharToMultiByte(CP_ACP, 0, lpwsz, nLen, lpsz, nLen1, NULL, NULL); delete []lpwsz; return lpsz; } char* AnsiToUtf8( const char *szANSI) { int nLen = MultiByteToWideChar(CP_ACP, 0, szANSI, -1, NULL, NULL); LPWSTR lpwsz = new WCHAR[nLen]; MultiByteToWideChar(CP_ACP, 0, szANSI, -1, lpwsz, nLen); int nLen1 = WideCharToMultiByte(CP_UTF8, 0, lpwsz, nLen, NULL, NULL, NULL, NULL); LPSTR lpsz = new CHAR[nLen1]; WideCharToMultiByte(CP_UTF8, 0, lpwsz, nLen, lpsz, nLen1, NULL, NULL); delete []lpwsz; return lpsz; }
相关文章推荐
- JQuery AJAX 方法总结:
- php学习笔记--面向对象oop及注意点
- 计算两个坐标点之间的距离
- Java笔试面试题005
- UIlabel自适应高度和UITableViewCell自适应高度
- QString与string的相互转换
- Qt 的QString类的使用
- ajax+servlet的网站架构
- oracle死锁解决方法
- Redis学习笔记
- 在linux下使终端和vi能输入中文
- OC之NSString2
- TP框架上传图片时报错“非法上传"处理
- JS函数式编程【译】3.2 开发和生产环境
- web开发不可错过的经典代码20段
- UltraISO制作U盘启动盘安装Win7/8/10系统攻略
- Html5(4)Selection 和 Range对象
- 【转】深入理解JVM—JVM内存模型
- php开发(一)
- Struts2文件的上传