DBCS ,宽字符与unicode
来源:互联网 发布:淘宝客服介入后撤销 编辑:程序博客网 时间:2024/04/29 00:44
在小型计算机开发的初期,就已经严格地建立了8位字节最多表示256个字符,但是中国日本和韩国的象形文字符号大约有约21000个,ASCII是无法表示的,因此提出了双字节字符集DBCS(double-byte character set),它从256开始,只有为日文,简体中文,韩语,繁体中文提供的windows版本才支持DBCS,双字符集并不是说字符由两个字节代表,有些字符还是由一个字节表示的,这会引起附加的程序设计问题.
Unicode是更好的解决方案,Unicode是统一的16位系统,足以表示世界上所有的语言文字,它的前128个字符也正好对应着ASCII字符,缺点在于占用两倍的内存。
宽字符是用与C语言支持多字节:
char数据形态
char c = 'a';//8
char *p = "hello!";
宽字符
typdef unsigned short wchar_t;//16
wchar_t c = 'A';在内存中是:0x41 0x00的形式
wchar_t *p = L"Hello!";sizeof(p) = 14
宽字符链接库函数的不同
char *pc = "hello!";
int len = strlen(pc);
我们得到len值为6,没有任何问题,
但是:
wchar_t * pw = L"hello!";
int lenw = strlen(pw);
我们将得到:
'function' : incompatible types - from 'unsigned short *' to 'const char *'
这样的警告或错误提示,因为strlen函数的参数指示要传入char类型,却传入了unsigned int 类型
事实上这种情况还存在于很多地方,不过不用担心宽字符版本的函数别人已经为我们写好了
如:
size_t _cdecl strlen(const char*);
宽字符版本:
size_t _cdecl wcslen(const wchar_t*);
需要注意的是sizeof 得到字符数组的长度时请像这样:
char szc[]="abcdef";
wchar_t szw[] = "abcdef";
int sizec = sizeof(szc)/sizeof(char);
int sizew = sizeof(szw)/sizeof(w_char);
不用切换的方案:
TCHAR
#ifndef _UNICODE
typedef char TCHAR
#define _tcslen strlen
#else
typedef wchar_t TCHAR
#define _tcslen wcslen
#endif
这些工作也是做好了的,只等我们用了
- DBCS ,宽字符与unicode
- Unicode与DBCS
- 字符基础 ASCII,DBCS和Unicode
- [文本]字符编码基础--ASCII、DBCS、Unicode
- 字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码
- 字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码
- 宽字符与Unicode
- 宽字符与Unicode
- ASCII, DBCS, Unicode【上】
- ASCII, DBCS, Unicode【下】
- ASCII, DBCS,Unicode小结
- 字符编码方式 ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS
- 字符编码方式 ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS
- 转 ASCII, DBCS,UNICODE小结
- Unicode 与 字符编码
- 字符与UNICODE编码
- 字符与Unicode互转
- unicode字符与ansi字符
- int指令理解
- 频繁弹出找到新硬件向导
- 世纪互联IDC,打通华南网络“快速路”
- MFC-Application framework概念
- 3G生活将为我们带来什么惊喜?
- DBCS ,宽字符与unicode
- 提升网络竞争力 世纪互联IDC布局华南
- OpenLayers 2.8 中NavToolbar中图标方向的配置
- 敏捷实践的原则
- 新的一年---2010
- SQL中的 datetime 格式[转]
- 谁知道哪能下到英英字典的数据库呀?
- 运用C#创建一个.Net下的Web Service
- S2Dao