vs2005下的编码转码
来源:互联网 发布:手机游戏网络稳定软件 编辑:程序博客网 时间:2024/04/27 13:44
习惯了linux c的编程,由于有个项目开发环境是windows,接触到了vc,一下子就懵了,在用vs2005开发的过程中,遇到的一个比较头疼的问题就是utf8和windows默认编码gbk(ANSI)相互转化的问题。在查阅了n多资料后,终于找了一个比较容易实现的方式。
首先因为涉及到嵌入系统问题,所以使用了MFC。由此包含的头文件是<cstringt.h><winnls.h><atlstr.h>
ConvertUTF8ToANSI(char* strUTF8,CString &strANSI) //
{
int nLen = ::MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,(LPCTSTR)strUTF8,-1,NULL,0);
//返回需要的unicode长度
WCHAR * wszANSI = new WCHAR[nLen+1];
memset(wszANSI, 0, nLen * 2 + 2);
nLen = MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUTF8, -1, wszANSI, nLen); //把utf8转成unicode
nLen = WideCharToMultiByte(CP_ACP, 0, wszANSI, -1, NULL, 0, NULL, NULL); //得到要的ansi长度
char *szANSI=new char[nLen + 1];
memset(szANSI, 0, nLen + 1);
WideCharToMultiByte (CP_ACP, 0, wszANSI, -1, szANSI, nLen, NULL,NULL); //把unicode转成ansi
strANSI = szANSI;
delete wszANSI;
delete szANSI;
}
Ansi2UTF8(CString &text)
{
// first convert ansi to unicode
DWORD LenUni = MultiByteToWideChar(GetACP(),0,text,-1,NULL,0);
wchar_t *uniStr = new wchar_t[LenUni];
MultiByteToWideChar(CP_ACP,0,text,-1,uniStr,LenUni);
// then convert unicode to UTF8
DWORD LenUTF8 = WideCharToMultiByte(CP_UTF8,0,uniStr,-1,NULL,0,NULL,NULL);
char *utf8Str = new char[LenUTF8];
WideCharToMultiByte(CP_UTF8,0,uniStr,-1,utf8Str,LenUTF8,NULL,NULL);
text = (LPCTSTR)utf8Str;
}
CString就相当于linux c里的const char*吧
CString可由string.c_str()来转化
string可由CString.GetBuffer(0)来转化
- vs2005下的编码转码
- 有关vs2005下的sqldatareader转DataTable
- 转 ffmpeg-0.8 开源编码解码库从linux下移植到windows vs2005
- vs2005下的dirent.h
- vs2005下的dirent.h
- VS2005下的快键
- vs2005下的dirent.h
- VS2005下opengl的helloworld
- (转)VS2005下DataGridView 的多种样式列控件
- VS2005下CString转char*的简单方法
- vs2005下安装boost::regex 及简单的使用(转)
- VS2005下CString转char*
- vs2003迁移到vs2005时候的脚本编码的处理
- VS2005 文件编码
- vs2005 修改新增文件时的默认编码方式
- VS2005下BoundField的DataFormatString不起作用了?
- vs2005下动态导航的制作
- DirectShow在VS2005下的bug
- kickstartU盘装系统
- extern 用法汇集
- python装饰器
- 我们结婚吧!让我陪你一辈子
- android Layout (复杂一点的)(嵌套)
- vs2005下的编码转码
- 在linux内核中创建一个/proc/下的文件结点实例http://www.lslnet.com/linux/dosc1/34/linux-259508.htm
- 关于读书:读XX书是否为时过早,是否有意义
- Jquery easyui datagrid 模板,动态切换表头
- tornado registry的问题--无法找到序数
- 确保已安装项目类型(.csproj)的应用程序
- c#filestream与streamwriter用法
- pthread多线程编程整理
- kindle touch使用,多亏有了calibre