• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-12-04 15:48 Aet 隐藏边栏 |   抢沙发  8 
文章评分 1 次,平均分 5.0

字节

char

  1. charc++里面基本的字符类型,通常用来表示单个字节
  2. 这大多数现代系统中,一个char占用1个字节,1个字节是8个位
  3. char可以用来表示ascii字符集中的字符,其中每个字符都可以用一个字节来表示
    1. ascii编码覆盖了英文字母、数字和一些基本的符号
    2. 但是在全球范围内,有很多其他的字符和符号,assic就不足以满足了
      因为上面也说了,1个字节是8个位,而每个位可以表示的情况有0和1这两种
    3. ascii是使用了7个位来表示一个字符,而7个位最多就是128个字符

多字节

  1. 上面描述的这种“不够用”的情况下,多字节是另外一种编码形式,用以解决这种不够用的情况
    1. 比如gb2312big5jis等各国地区各自编写的编码标准
  2. 特点是单子字符可能由多个字节来表示
    1. 比如gb2312big5使用2个字节来表示一个汉字
  3. 问题1
    1. 这种各自编码的字符集之间存在互不兼容的情况,同一个编码值,在不同的编码标准里面,表示不同的字符
  4. 解决1
    1. 为解决上面的问题,就有了unicode
    2. unicode通常用两个字节表示一个字符,也就是它可以存65535个字符,现在是够用了
    3. 但是也引出了其他的效率问题,如下
  5. 问题2
    1. 如果将所有字符在unicode里面都用两个字节来表示,对以前在ascii里面的那些简单的字符,如英文字母、数字等存储,效率就有问题了
    2. 虽然可以把高位全部填0来表示,但是它以前只需要1个字节就够了,现在却需要用2个字节
  6. 解决2
    1. 为了解决上面的问题,就有了utf-8
    2. 它的特点是它可以根据不同的符号自动选择不同的编码,比如英文字母,它用一个字节就够了

UTF-8

  1. 是一种广泛使用的 Unicode 字符编码
  2. 它是一种变长编码,可以使用 1 到 4 个字节来表示一个字符
  3. UTF-8 被设计成与传统的 ASCII 编码兼容
  4. UTF-8 没有字节顺序问题,因为即使在多字节字符中,其字节序列也是明确定义的
  5. 普通的 UTF-8 文件不包含 BOM
    1. 这意味着文件以实际的文本内容开始,没有特定的标记来指明其编码

UTF-8 BOM

  1. 在文件开头包含一个特殊的字节序列(BOM),即 EF BB BF
  2. BOM 在这里用作一个标记,表明该文件是用 UTF-8 编码的
    1. 虽然在 UTF-8 中不需要用于字节顺序的标记,BOM 仍可用于表示编码类型
  3. 在某些情况下(尤其是在Windows环境中),UTF-8 BOM 可用于帮助软件确定文件的正确编码

宽字节

  1. 一般指unicode编码的字符集
    1. 某种程度上,可以理解为宽字节就是多字节
  2. c++里面用charchar16_tchar32_t分别表示无符号8位整数,无符号16位整数,无符号32位整数
  3. utf-8,utf-16,utf-32分别以它们作为编码单位
  4. 比如,汉字在不同的编码里占不同的字节
    1. utf-8:3个char,共3个字节
    2. utf-16:2个char16_t,共4个字节
    3. utf-32:2个char32_t,共8个字节

默认编码

  1. c++里面,字符串字面量的默认编码取决于编译器和系统的配置
    1. 在现代大多数的编译器和系统中,默认的编码通常是utf-8
    2. 在一些老旧或者特定区域设置的系统中,可能使用本地编码,如gbkbig5
  2. 如果源文件被保存为utf-8编码,并且编译器默认或被配置为utf-8编码,那么字符串字面量也被视为utf-8编码
  3. 一些编译器可能允许通过命令行选项或项目设置指定源代码的编码
  4. 其他编码,汉字占字节:
    1. utf-8:3个字节
    2. gbk:2个字节
    3. big5:2个字节

查看编码

Windows

macOS,Linux

中文存储

  1. std::string
    1. 当前环境是utf-8编码,每个汉字占了3个字节
    2. gbk环境是2个字节

  1. std::wstring
    1. 当前环境是utf-8编码,每个汉字占了3个字节

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享