MFC中Unicode与ASCII码转换

Unicode码与ASCII码

Unicode码:Unicode码也是一种国际标准编码,采用二个字节编码,与ASCII码不兼容。它前128个字符就是ASCII码,之后是扩展码。

ASCII码:American Standard Code for Information Interchange,美国信息交换标准代码。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。

MFC中工程中的设置字符集

Mfc工程中字符集的设置

在mfc工程属性->配置属性中->常规中->项目默认值->字符集中,有使用Unicode字符集的设置。

该字符集设置为Unicode字符集后,常用的CString的初始化,格式化接口,需要用到_T宏。此外,在char型数组转化为CString中,常常有乱码出现。下面总结一下,出现乱码后的解决方法。

当字符集设置成”使用多字节字符集”时,

将CString转化成char型数据指针:

CString file;

char* pFile = (LPSTR)(LPCSTR)file;

将char型数据转化为CString,不需要添加_T宏:

CString info;

char version[20];

info.AppendFormat("ldmp Sn: [%s] ..", version);

当字符集设置成”使用Unicode字符集”时,

CString与char型数据相互转化如下:

void CStringToChar(CString str,char *dst)

{

#ifdef _UNICODE

wchar_t *wChar = str.GetBuffer(str.GetLength());

str.ReleaseBuffer();

// 将得到的wchar* 类型转为 char*类型

size_t len = wcslen(wChar) + 1;

size_t converted = 0;

char *cChar;

cChar = (char*)malloc(len * sizeof(char));

wcstombs_s(&converted, cChar, len, wChar, _TRUNCATE);

strcpy(dst,cChar);

free(cChar);

#else

CString cstr(str);

char *p = (LPSTR)(LPCSTR)str1;

// 第二种

使用 GetBuffer方法返回 char * 类型

CString str1 = "123";

char *t1 = str1.GetBuffer(str1.GetLength());

str1.ReleaseBuffer();

#endif

}

将char转化为CString方法:

  1. 直接使用格式化字符串。

CString info;

char version[20];

info.AppendFormat(_T("ldmp Sn: [%s] .."), version);

2.使用以下方法也可以转化

CString charToCString(char* str)

{

//将char 转换为 CString字符

#ifdef _UNICODE

DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);

wchar_t *pwText;

pwText = new wchar_t[dwNum];

if (!pwText)

{

return _T("");

}

MultiByteToWideChar(CP_ACP, 0, str, -1, pwText, dwNum);

CString cstr = pwText;

delete[](char *)pwText;

#else

CString cstr(str);

#endif

return cstr;

}

附:

GB2312,BIG5,Unicode编码转换方法

//GB2312 转换成 Unicode:

wchar_t* GB2312ToUnicode(const char* szGBString)

{

UINT nCodePage = 936; //GB2312

int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);

wchar_t* pBuffer = new wchar_t[nLength+1];

MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);

pBuffer[nLength]=0;

return pBuffer;

}

//BIG5 转换成 Unicode:

wchar_t* BIG5ToUnicode(const char* szBIG5String)

{

UINT nCodePage = 950; //BIG5

int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);

wchar_t* pBuffer = new wchar_t[nLength+1];

MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);

pBuffer[nLength]=0;

return pBuffer;

}

//Unicode 转换成 GB2312:

char* UnicodeToGB2312(const wchar_t* szUnicodeString)

{

UINT nCodePage = 936; //GB2312

int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);

char* pBuffer=new char[nLength+1];

WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);

pBuffer[nLength]=0;

return pBuffer;

}

//Unicode 转换成 BIG5:

char* UnicodeToBIG5(const wchar_t* szUnicodeString)

{

UINT nCodePage = 950; //BIG5

int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);

char* pBuffer=new char[nLength+1];

WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);

pBuffer[nLength]=0;

return pBuffer;

}

//繁体中文BIG5 转换成 简体中文 GB2312

char* BIG5ToGB2312(const char* szBIG5String)

{

LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);

wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);

char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);

int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);

char* pBuffer = new char[nLength + 1];

LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);

pBuffer[nLength] = 0;

delete[] szUnicodeBuff;

delete[] szGB2312Buff;

return pBuffer;

}

//简体中文 GB2312 转换成 繁体中文BIG5

char* GB2312ToBIG5(const char* szGBString)

{

LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);

int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);

char* pBuffer=new char[nLength+1];

LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);

pBuffer[nLength]=0;

wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);

char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);

delete[] pBuffer;

delete[] pUnicodeBuff;

return pBIG5Buff;

}

使用Unicode字符集出现乱码问题相关推荐

  1. Unicode字符集下CString与char *转换 (解决中文乱码等)(转)

    UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家 ...

  2. 使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题

    使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题 新建一个记事本,写入"中",另存为ANSI.txt,编码选ANSI:再次另存为Unicode ...

  3. Unicode字符集下WriteFile中文处理

    最近在使用WriteFile函数时发现,vc2008中unicode字符集下处理中文乱码的一些解决方法,归纳如下 1. 写入的时候采用多字节char类型 HANDLE hFile;DWORD nByt ...

  4. 由web程序出现乱码开始挖掘(Bom头、字符集与乱码)

    从第一次开始写web程序,自己还有身边同事开发出现乱码情况基本都没有消停过.估计以后还会一样继续. 这么些年,不断修修改改,也总结也归纳.程序从asp,asp.net,jsp,php,服务器从wind ...

  5. ASCII码和Unicode字符集

    一.ASCII  码 ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统, ...

  6. ASCII,GBK,Unicode(UTF-32/UTF-8),乱码,ANSI详解

    前言 总目录 日常开发过程中,经常会遇到ASCII,GBK,Unicode(UTF-32/UTF-8)等名词,对于这些概念是不是有点傻傻分不清呢?相信看下本文,你会有自己的理解. 一.ASCII码 1 ...

  7. 用计算机都会听错数字怎么回事,由web程序出现乱码开始挖掘(Bom头、字符集与乱码)...

    从第一次开始写web程序,自己还有身边同事开发出现乱码情况基本都没有消停过.估 计以后还会一样继续. 这么些年,不断修修改改,也总结也归纳.程序从asp,asp.net,jsp,php,服务器从win ...

  8. 详解Unicode字符集以及字符编码实现(一)

    在日常生活中,我们经常会碰到打开一个文件,但是文件内容乱码的问题,比如我想看<西游记>这部小说. 下载链接:https://m.ijjjxs.com/txt/dl-35-12585.htm ...

  9. 【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集

    目录 前言 一.什么是编码,数据类型和编码有什么关系? 二.英文字符编码 ASCII编码 三.中文编码 1. GB2312标准 2. GBK编码 3. 其他中文编码 四.Unicode字符集 1. U ...

  10. 《windows核心编程系列》二谈谈ANSI和Unicode字符集

    第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...

最新文章

  1. java 写一个商店_Java Web开发之基于Session的购物商店实现方法
  2. 中国科学家将绘制最精细人脑三维“地图”
  3. 用iPhone薅Google羊毛:相册可无限存储高清照片,只要一步设置就搞定
  4. Subversion客户端认证凭证缓存总结
  5. 云原生之容器安全实践
  6. oracle parameterfile
  7. 程序员的职业选择,你应该知道的,持续更新ing
  8. 【Elasticsearch】es Ingest 节点
  9. [HTML5和Flash视频播放器]Video.js 学习笔记(一 ) HLS库:videojs-contrib-hls
  10. 沧小海笔记之PCIE协议解析——第一章 PCIE概述(上)
  11. xampp 可道云_利用xampp+可道云KodExplorer本地搭建私有云
  12. android 获取路由器mac,android设备获取当前wifi下的路由器的mac和路由器的名称
  13. 第六次毕业设计任务书
  14. 第三方登录之QQ登录(一)——QQ互联开放平台新建应用
  15. 联想服务器 硬盘支架 st,联想服务器硬盘阵列离线怎么解决
  16. 如何用ffmpeg合并音频和视频?
  17. c语言is函数,C ++中的is_trivial函数
  18. CXPlain: Causal Explanations for Model Interpretation under Uncertainty
  19. AM5728调试经历(2)
  20. 安装ie9提示未能完成安装_win7系统安装Ie提示“Internet explorer未能完成安装”的解决方法...

热门文章

  1. linux 配置 NTP 服务器
  2. opengles图像处理之边缘检测
  3. 正则表达式手机号(大陆,香港)
  4. volte的sip信令流程_VOLTE-SIP完整信令解析
  5. QR 二维码纠错码(三)
  6. matlab drtoolbox 使用,MATLAB数据降维工具箱drtoolbox介绍
  7. 使用Mapviz,进行机器人GPS轨迹卫星地图绘制(2)-调用天地图API,快速加载刷新地图
  8. java多个点求连线_实现简单的粒子连线
  9. 海明贴近度matlab,Matlab学习系列23.-模糊聚类分析原理及实现.docx
  10. 全球免费开放电子图书馆