C++入门教程(二十二):编码、字符和字符串

本文介绍了C++中的编码、字符和字符串基础知识,包括ASCII、Unicode编码,普通字符、转义字符的概念,以及字符串的基本操作。还讨论了原生字符串的使用,帮助初学者理解字符和字符串在C++中的表示和处理。
摘要由CSDN通过智能技术生成

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/

目录

编码

之前提到的ASCII就是一种编码方式。我们知道,计算机只会处理和保存数字,而实际上,计算机上看到的文字,就是数字。

计算机会根据一个个的数字,然后去查一下字典,找出对应的文字的图片,然后交给显卡显示出来,这样我们就能看到文字了。

这个字典叫做字符集

ASCII就是一个字符集,用数字0~127来代表字母数字符号等字符。

字符集有ASCII、本地字符集(如GBK)和Unicode。

Unicode包括UTF-8、UTF-16、UCS-2、UTF-32、USC-4,而UTF-16与UCS-2可以理解为等价,UTF-32与USC-4等价。并且UTF-16和UTF-32又分别有两种:BE和LE。这些都是数字和文字对应的字典。

有时候我们会看到乱码,就是因为你用错字符集或者你把不是文字的数据用文字字典找文字;归根究底,就是 你!用!错!字!典!了!

C++支持UTF-8、UTF-16、UTF-32和本地字符集。

Windows默认的字符集是UTF-16。而Linux/OS X默认的字符集是UTF-8。所以写跨平台代码就要注意了。就算是同样是Windows,如果你用错字符集,你的程序在英文系统或者中文系统就会出现乱码。

以下是每个字符集和C++数据类型对应关系和如何选择合适的字符集:

字符集 字符数据类型 字符串数据类型 使用方式 优点 缺点 常见使用场景
UTF-8 char std::string u8”字符串” 可跨平台,以每个字符的最小占用来分配大小,所以占用小 以每个字符的最小占用来分配大小,ASCII字符用1个字节保存,而中文字符使用3个或4个字节保存,每个字符大小不一样,所以不能直接操作字符串;标准不支持终端直接输出 网络传输
UTF-16 char16_t std::u16string u”字符串” 可跨平台,每个字符都用2个字节来保存,占用比UTF-32小,比UTF-8更易运算处理 2个字节保存的文字有限,对于emoji表情和部分生僻文字要用多个 char16_t 保存,此时直接处理字符串有可能出错;标准不支持终端直接输出 字符串保证没有生僻字时使用
UTF-32 char32_t std::u32string U”字符串” 可跨平台,保存世界上所有字符,处理字符串容易且不会出错 每个字符都用4个字节来保存,占用非常大;标准不支持终端直接输出 有生僻字或者emoji表情时使用

剩下两种(""L"")方式,由于历史原因,在不同的操作系统会有不同的意义,所以会有点复杂:

字符数据类型 字符串数据类型 使用方式 字符集 使用场景
char std::string “字符串” 本地字符集(Windows) 字符串只用于显示而不需要进行操作
UTF-8(Linux/OS X)
wchar_t std::wstring L”字符串” UTF-16(Windows) 程序可跨不同语言的Windows平台,使用Windows API开发Windows桌面应用时推荐使用,跨不同操作系统不推荐使用,需要设置本地字符集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值