当前位置:网站首页>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的总结。
边栏推荐
猜你喜欢
数据湖(八):Iceberg数据存储格式
2017 8th Blue Bridge Cup group a provincial tournament
【论文解读】用于白内障分级/分类的机器学习技术
KDD 2022 | realize unified conversational recommendation through knowledge enhanced prompt learning
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
Aike AI frontier promotion (7.6)
After working for 5 years, this experience is left when you reach P7. You have helped your friends get 10 offers
Caching strategies overview
SAP Fiori应用索引大全工具和 SAP Fiori Tools 的使用介绍
随机推荐
Opencv learning example code 3.2.3 image binarization
Summary of cross partition scheme
3D face reconstruction: from basic knowledge to recognition / reconstruction methods!
Thinking about agile development
[sliding window] group B of the 9th Landbridge cup provincial tournament: log statistics
快过年了,心也懒了
Introduction to the use of SAP Fiori application index tool and SAP Fiori tools
R3live notes: image processing section
966 minimum path sum
@PathVariable
document.write()的用法-写入文本——修改样式、位置控制
[go][转载]vscode配置完go跑个helloworld例子
It's almost the new year, and my heart is lazy
Fzu 1686 dragon mystery repeated coverage
R語言可視化兩個以上的分類(類別)變量之間的關系、使用vcd包中的Mosaic函數創建馬賽克圖( Mosaic plots)、分別可視化兩個、三個、四個分類變量的關系的馬賽克圖
js中,字符串和数组互转(一)——字符串转为数组的方法
Reference frame generation based on deep learning
[in depth learning] pytorch 1.12 was released, officially supporting Apple M1 chip GPU acceleration and repairing many bugs
ICML 2022 | Flowformer: 任务通用的线性复杂度Transformer
PG basics -- Logical Structure Management (transaction)