ANSI UNICODE UTF8 专辑


前言

内存中的数据是单纯的二进制数据,不管你用什么指针指向这段内存,数据就是数据,不会有任何改变。


字符集:规定二进制数据和某种语言内的文字之间的对应关系,这就叫该种语言的字符集
最基本的是ASCII,规定数值48(换成二进制序列,更直观)对应字符'0'(可理解为一个图形符号),诸如此类,但由于这种对应关系的历史局限性(发明它的人当时没兴趣考虑非英文语言),同样的二进制数据,在不同的字符集内就对应不同的文字。而规定一套对应关系,使得二进制数据能够对应很多语言的文字,这就叫Unicode

char*和wchar_t*指向同一段内存,都只指向这一段二进制数据而已,区别就在于你使用这两种类型的指针来操作数据的时候,按照相应的类型来操作这段内存。


一 字符集介绍

1 char   ---------------ANSI字符集   1 byte

eg:

char szString[100];

strcpy(szString,"test");

2 wchar_t   ----------------Unicode字符集   2bytes

eg:

wchar_t szString[100];

wcscpy(szString,L"test");

3 TCHAR---------------如果你希望同时为ANSI和Unicode编译的源代码

eg:

TCHAR szString[100];
_tcscpy(szString,_TEXT("test"));


UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。

UTF-8用1到6个字节编码Unicode字符,但目前全世界的所有文字和符号种类加起来也只要编到 4个字节长就够了

eg:

//  UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一
//点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字
//节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这
//些连续“1”称为标记位),表示转换成几个字节:“110”连续两个
//“1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110”
//则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和
//字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标
//记,剩下的6个位才做为字符码位使用。
//  这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的
//原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字
//符码,由此类推。编码方式的模板如下:
//
//原始码(16进制) UTF-8编码(二进制)
//--------------------------------------------
//0000 - 007F       0xxxxxxx
//0080 - 07FF       110xxxxx 10xxxxxx
//0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx


二 转换方法

1, ANSI与Unicode
Unicode称为宽字符型字串,COM里使用的都是Unicode字符串。
将ANSI转换到Unicode
(1)通过L这个宏来实现,例如: CLSIDFromProgID( L"MAPI.Folder",&clsid);
(2)通过MultiByteToWideChar函数实现转换,例如:
char *szProgID = "MAPI.Folder";
WCHAR szWideProgID[128];
CLSID clsid;
long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));
szWideProgID[lLen] = '
(3)通过A2W宏来实现,例如:
USES_CONVERSION;
CLSIDFromProgID( A2W(szProgID),&clsid);


2 将Unicode转换到ANSI
(1)使用WideCharToMultiByte,例如:
// 假设已经有了一个Unicode 串 wszSomeString...
char szANSIString [MAX_PATH];
WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL );
(2)使用W2A宏来实现,例如:
USES_CONVERSION;
pTemp=W2A(wszSomeString);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值