
typedef unsigned short wchar_t
就是 wide character type 的意思
在 美国资讯交换标准码(ASCII: American Standard Code for Information Interchange)
开发过程中 为了节约成本(排除8位, 当时每位元的存储空间成本很昂贵) 最终由美国国家标准协会发布了7位版本的方案 记录在ANSI X3.4-1986 中
该标准在美国及拉丁字母国家使用方便 但在远东 西欧南部 会遇到拉丁字母中不存在的字母
比如俄语(斯拉夫) 希腊语 希伯来语 阿拉伯语 以及 汉字 日语 韩语
为了解决的字符集不同的恶心问题(内码转换) 诞生了Unicode字元集 它比ASCII多了一倍空间
这个wchar_t 就是Unicode对应的资料结构 它是16位的 可以装得下汉字哦
wchar_t *p = L"ooxx!"这个L告诉编译器, 把字母扩展为宽字元
你也会见到 _T(ooxx) 或者 TEXT(之类的写法) 他们都是为了让你的代码能在美欧以外运行
#ifdef UNICODE //UNICODE版
#define __T(x) L##x//这##字符串连接符 你应该知道滴
#else //ASCII版
#define __T(x) (x)
#endif
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
因此他们都是一样的
在windows的编程中 更普遍的写法是用WCHAR取代wchar_t
因为符合微软的命名规则 当然你如果喜欢Linux的话...
typedef char CHAR
typedef wchar_t WCHAR
如果你的代码是国际版本(多语言版)
你也可以用TCHAR.. 它是一个依赖识别字的宏 可以是char 也可以是wchar_t...
试试这个四个函数,C 里面的,Linux 可用:mbtowc
wctomb
mbstowcs
wcstombs
在 Linux 下试试看吧:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
size_t cch
char psz[1024]
wchar_t pwsz[] = { 0x52B3, 0x788C, 0x788C, 0 }
setlocale(LC_ALL, "")
cch = wcstombs(psz, pwsz, 1024)
if (cch != 0 &&cch != -1) {
printf("%s", psz)
}
return 0
}
zdl_361 说的 "utf8 劳碌碌" 不对,因为我也输出 "劳碌碌",而我是用 Unicode 编码的。在 Windows 上,char 是 ANSI,Unicode (wchar_t) 是 UTF-16;在 Linux 上,char 是 UTF-8,Unicode (wchar_t) 是 UTF-32。不过对于这个函数来说,在哪个平台上都不会因为字符编码而影响使用。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)