Linux下怎么将wchar

Linux下怎么将wchar,第1张

在<WCHAR.h>头文件中有定义

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。不过对于这个函数来说,在哪个平台上都不会因为字符编码而影响使用。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/6127961.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-15
下一篇2023-03-15

发表评论

登录后才能评论

评论列表(0条)

    保存