ANSIC和Unicode之间的转换
2015-05-31 21:05
155 查看
一、简介
在VC开发中我们经常遇到字节转换的问题,因为现在开发基本都要用到Unicode,而C的函数都是ANSIC码的,如果我们在VC开发中需要用到C的函数就必须要处理这个问题,ANSIC码是单字节的,而Unicode是双字节的,本质上市单双字节的转换。
二、ANSIC
不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为
ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
三、Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode
是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
四、字节转换
1.双字节转单字节,用WideCharToMultiByte();
运行结果:
2.单字节转双字节:MultiByteToWideChar()
运行结果:
在VC开发中我们经常遇到字节转换的问题,因为现在开发基本都要用到Unicode,而C的函数都是ANSIC码的,如果我们在VC开发中需要用到C的函数就必须要处理这个问题,ANSIC码是单字节的,而Unicode是双字节的,本质上市单双字节的转换。
二、ANSIC
不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为
ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
三、Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode
是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
四、字节转换
1.双字节转单字节,用WideCharToMultiByte();
#include <iostream> using namespace std; #include <atlstr.h> int main() { CString str = L"liuxijiao计算机网络"; int n = str.GetLength(); //获取str的字符数 int len = WideCharToMultiByte(CP_ACP, 0, str, n, NULL, 0, NULL, NULL); //获取宽字节字符的大小,大小是按字节计算的 char *pChar = new char[len + 1]; //以字节为单位 WideCharToMultiByte(CP_ACP, 0, str, n, pChar, len, NULL, NULL); //宽字节编码转换成多字节编码 pChar[len + 1] = '\0'; //多字节字符以'\0'结束 cout<<pChar<<endl; delete[] pChar; return 0; }
运行结果:
liuxijiao计算机网络
2.单字节转双字节:MultiByteToWideChar()
#include <iostream> using namespace std; #include <atlstr.h> #include <stdio.h> #include <string.h> int main() { //将char数组转换为wchar_t数组 char *pChar = "liuxijiao计算机网络"; int charLen = strlen(pChar); //计算pChar所指向的字符串大小,以字节为单位,一个汉字占两个字节 int len = MultiByteToWideChar(CP_ACP, 0, pChar, charLen, NULL, 0); //计算多字节字符的大小,按字符计算 wchar_t *pWChar = new wchar_t[len + 1]; //为宽字节字符数申请空间, MultiByteToWideChar(CP_ACP, 0, pChar, charLen, pWChar, len); //多字节编码转换成宽字节编码 pWChar[len] = '\0'; //将wchar_t数组转换为CString CString str; str.Append(pWChar); delete[] pChar; delete[] pWChar; return 0; }
运行结果:
liuxijiao计算机网络
相关文章推荐
- COJ 0501 取数游戏(TPM)
- 一.计算机网络概述
- 任务调度系统
- Java 正则表达式
- 网上找到的JNI用法
- fatal error LNK1104: cannot open file "Debug/构造函数.exe"
- 2015百度之星初赛(二) 连接的管道 1002
- 数据库数据处理故事多
- HDFS HA切换后missing block问题分析
- 找出数组中任何相邻子向量的最大和
- Java 正则表达式详解
- 在Winform中实现拖放的功能
- 隔行变色的表格
- 阿里巴巴Dubbo实现的源码分析
- Windows Phone 8.1中AppBarToggleButton的绑定问题
- hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
- Ajax(一)
- hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
- Python Web运行环境搭建
- mysql主从复制实现数据库同步