关于unicode和多字节之间的关系及区别(笔记)
来源:互联网 发布:阿里云短信 regionid 编辑:程序博客网 时间:2024/05/20 07:33
我们都知道微软采用了两种字符集编码格式,一种是unicode编码;另一种便是多字节编码格式。那他们之间的关系是什么呢?好的,让我们先看下面一段程序:
TCHAR* p = _T("it学吧");
// 多字节字符集
int a = sizeof(p); //===???
int b = _tcslen(p);//===???;
// 在UNICODE字符集下
int c = sizeof(p); //===???
int d = _tcslen(p);//===???
这道题已经可以体现unicode和多字节之间有什么区别了。首先呢,_tcslen这个函数在是一个宏定义,定义如下:
#ifdef _UNICODE
#define _tcslen wcslen
#else
#define _tcslen strlen
#endif
上面的表述清楚明了,也就是说:
当没有定义_UNICODE宏时,TCHAR = char,_tcslen = strlen
当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen
由于p是指针类型,也即是表述地址的变量,在32位机上为4字节,所以a和c均为4,多字节的意思是字符串中可以是一个字节表示也可以两个字节表示,英文字符一个字节即可,不过汉字需要两个字节(生僻字除外 ),所以在多字节情况下b是6,(i占一个字节,t占一个字节,(“学吧”)两个汉字各占两个字节)字符串结束符号不算,因为只计算有效长度。在unicode环境下,d为4,(因为此时_tcslen为函数wcslen,一次跨步两个字节,也即是一个长度代表两个字节)此时字符串结束标志需要两个'\0'表示,如果不全是两个结束标志,则计算机认为此字符串没有结束,所以此时计算过程为:字母'i'占两个字节,其中前一个为'\o',第二个为其'i',t亦是如此,‘学吧’各自占两个字节,也就是两个长度,所以此时字符串长度为4。由于刚开始写博客,如若有误,敬请指正~~~~~
附:
通常我们说汉字是占用2字节(GB-2312)。
具体依据汉字编码形式有所不同:
GB-231280 编码为 2个字节(Byte) 包含了 20902 个汉字,其编码范围是 0x8140-0xfefe。
GB18030-2000(GBK2K) 在 GBK 的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的字形。编码是变长的,其二字节部分与 GBK 兼容;四字节部分是扩充的字形、字位,其编码范围是首字节 0x81-0xfe、二字节0x30-0x39、三字节 0x81-0xfe、四字节0x30-0x39
- 关于unicode和多字节之间的关系及区别(笔记)
- unicode和MBCS(多字节字符集)的关系
- unicode和MBCS(多字节字符集)的关系
- unicode和MBCS(多字节字符集)的关系
- unicode和MBCS(多字节字符集)的关系
- unicode和多字节字符集的区别
- UFT-8,多字节和UNICODE之间的转换
- UFT-8,多字节和UNICODE之间的转换
- Unicode字符集和多字节字符集关系(一)
- Unicode字符集和多字节字符集关系(二)
- Unicode字符集和多字节字符集关系(一)
- Unicode字符集 和 多字节字符集 关系
- Unicode字符集和多字节字符集关系
- Unicode字符集和多字节字符集关系
- Unicode字符集和多字节字符集关系
- Unicode字符集和多字节字符集关系
- Unicode字符集和多字节字符集关系
- Unicode字符集和多字节字符集关系
- cobol文件操作
- 谈 Linux,Windows 和 Mac -王银纠正对linux的看法
- 世界上最漂亮的硬币、人民币呢?
- 做update的时候 用到的movefileex
- 73种网页常用js代码
- 关于unicode和多字节之间的关系及区别(笔记)
- NSZombieEnabled 解决EXC_BAD_ACCESS错误
- 转义字符表大全(转)
- 刘勇 - 购物狂欢节的运维故事
- Makefile内置变量,递归式变量,直接展开式变量,条件赋值,追加赋值,Makefile中shell命令的执行
- 世界十大最漂亮钞票
- Android UI开发第十九篇——介绍一个开源的gifview——Android显示GIF动画
- JVM参数
- const_cast示例