当前位置:网站首页>c语言char, wchar_t, char16_t, char32_t和字符集的关系
c语言char, wchar_t, char16_t, char32_t和字符集的关系
2022-07-06 13:08:00 【landian004】
1,char不是标准里写死的固定8位,但它是固定的c/c++中的1 字节!
但一般就是8位。而且是8位时,还分 有符号和无符号,无符号时是0-255,有符号时是0-127。有符号时对应 的就只能是ASCII字符集了,因为iso-8859-1或windows1252或EBCDIC是256个字符的。我们的电脑上一般就是 有符号的,也就是对应的ASCII字符集。win,mac和linux上可以去验证(怎样验证?)
2,wchar_t是16位或32位(linux里是32位,win里是16位),所以它不可移植。
wchar_t还跟setlocale函数有联系,必须用到setlocale函数,它对应的字符集不知道跟setlocale有怎样的联系,第二,setlocale不知道跟char16_t 和char32_t有关联吗?总的来说,因为不可移植,用不到wchar_t,而直接用固定宽度字符集的char16_t和char32_t。
3,char16_t是确定的16位,也是确定的utf16字符集。而ucs-2才是确定的16位,utf16不是确定的16位,它是变长的(可以是16位和32位)。char16_t是能存储所有的utf16的code units,而不是code points(也即是所有字符),在utf16编码方案里超过16位长的字符用2个code units来表示。也即是utf16里超过16位长的字符是2个char16_t 来表示。
4,char32_t是确定的32位,确定的utf32 。只是缺点是它浪费空间!
5,但是实际使用中,不能用char16_t , char32_t,原因是语言和标准库里竟然没有 这2种c11新类型的输出方法!!所以还是只能用wchar_t!!
char* str="中文"; // 不对
wchar_t* str2 = L"中文"; //用这种
char16_t str3 = u"中文"; //没有wprintf等输出函数!所以不能用!
6,用char* str = "中文"; printf("%s", str); 同样能正确打印,但用strlen()函数测长度就错了,不应该用char* 或 const char* 或 char str[] 来表示中文字符串。问题:char* str和printf(而不是wprintf)也能正确表示和打印中文字符串的原因是什么呢?
7,char和wchar_t的表示和打印 都只是控制台程序才用到,当写图形界面程序时相应库里有中文在界面中的输出的函数,比如SDL里?但是控制台程序里表示和打印中文时,虽然不用wchar_t和wprintf和setlocale()函数仍然能正确处理,但正确做法仍然是用wchar_t,setlocale(),wprintf这些来表示。
8,setlocale(LC_ALL, "zh-CN"); // "zh-CN"或“zh-CN.UTF-8"或 "",这3种表示法都行,为了可移植推荐用"zh-CN" 这种写法(实际试验得 "zh-CN.UTF-8"也行,且不区分大小写)。"zh-CN"这里还有更多表示法。但是setlocale的原理仍不清楚??
以上是查阅阶段1的总结。
边栏推荐
- Swagger UI tutorial API document artifact
- Opencv learning example code 3.2.3 image binarization
- Pat 1078 hashing (25 points) ⼆ times ⽅ exploration method
- [Li Kou brushing questions] one dimensional dynamic planning record (53 change exchanges, 300 longest increasing subsequence, 53 largest subarray and)
- [sliding window] group B of the 9th Landbridge cup provincial tournament: log statistics
- In JS, string and array are converted to each other (II) -- the method of converting array into string
- Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
- Deployment of external server area and dual machine hot standby of firewall Foundation
- Proxy and reverse proxy
- The most comprehensive new database in the whole network, multidimensional table platform inventory note, flowus, airtable, seatable, Vig table Vika, flying Book Multidimensional table, heipayun, Zhix
猜你喜欢
Quick news: the flybook players' conference is held online; Wechat payment launched "education and training service toolbox"
[Li Kou brushing questions] one dimensional dynamic planning record (53 change exchanges, 300 longest increasing subsequence, 53 largest subarray and)
Reference frame generation based on deep learning
[redis design and implementation] part I: summary of redis data structure and objects
袁小林:安全不只是标准,更是沃尔沃不变的信仰和追求
Fastjson parses JSON strings (deserialized to list, map)
【mysql】触发器
3D人脸重建:从基础知识到识别/重建方法!
Caching strategies overview
愛可可AI前沿推介(7.6)
随机推荐
Swagger UI教程 API 文档神器
LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件
[interpretation of the paper] machine learning technology for Cataract Classification / classification
Why do job hopping take more than promotion?
Pat 1078 hashing (25 points) ⼆ times ⽅ exploration method
Dialogue with Jia Yangqing, vice president of Alibaba: pursuing a big model is not a bad thing
Aike AI frontier promotion (7.6)
【论文解读】用于白内障分级/分类的机器学习技术
b站视频链接快速获取
One line by line explanation of the source code of anchor free series network yolox (a total of ten articles, you can change the network at will after reading it, if you won't complain to me)
Three schemes of SVM to realize multi classification
Is it profitable to host an Olympic Games?
Pat 1085 perfect sequence (25 points) perfect sequence
What's the best way to get TFS to output each project to its own directory?
Start the embedded room: system startup with limited resources
el-table表格——sortable排序 & 出现小数、%时排序错乱
【力扣刷题】32. 最长有效括号
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
js中,字符串和数组互转(一)——字符串转为数组的方法
js 根据汉字首字母排序(省份排序) 或 根据英文首字母排序——za排序 & az排序