【C语言】多字节字符、宽字符(涉及字符集和编码)

本文详细介绍了字符集、编码的概念,重点讨论了ASCII、Unicode、GB2312、GBK和GB18030等编码方式,以及UTF-8的变长编码特性。还涵盖了宽字符、多字节字符的区别,以及如何在C语言中处理不同编码的字符串,避免乱码问题和正确设置语言环境的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符集、编码:

字符集:一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。例如:ASCII、Unicode、GB2312、GBK、GB18030、BIG5(繁体中文) ...

编码方式:符号集合与数字系统之间的对应关系,是信息处理的一项基本技术,将符号转换为计算机可以接受的二进制数值。例如:ASCII、UTF-8、UTF-16、UTF-32、GB2312、GBK、GB18030 ...

① ASCII:编码范围0x00-0x7F(即0-127),只用7位二进制就表示所有英文字符(128个字符)。ASCII是单字节编码,一个字符占1个字节。

② Unicode字符集:称为统一码、万国码、国际码。编码范围0x0000-0x10FFFF,包括100多万个字符。每个字符都有一个二进制数值(码值、码点),例如:字符"A"的码点为"0x0041",字符"中"的码点为"0x4E2D"。

Unicode字符集有3种存储方式:UTF-8,UTF-16,UTF-32。

  • UTF-8 编码:广泛使用的编码方式。可变长度编码规则,一个字符1-4个字节,不同字符占用字节数不同。前128个字符(ASCII),一个字符占1个字节。一个汉字一般占用3个字节。UTF-8不需要BOM来表明字节顺序,但可以表明编码方式。
  • UTF-16 编码:对应UCS-2(Universal Character Set coded in 2 octets),一个字符占2个字节,范围为 U+0000~U+FFFF。需要识别字节顺序(大端或小端)。需要BOM(Byte Order Mark, 放在文档开头告诉阅读器该文档的字节序)。
  • UTF-32 编码:对应UCS-4,一个字符占4个字节,范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2一样。需要BOM(Byte Order Mark)。

③ GB2312:中国国家标准简体中文字符集,专门用于汉字处理、汉字通信信息交换等。GB2312是对ASCll码的扩展,一个汉字占用两个字节。只有6000多个汉字。

GBK:《汉字内码扩展规范》,GB2312的扩展,有2万多个码值。一个汉字占用两个字节。一般看到936就知道是GBK。

GB18030:国家标准GB 18030-2005《信息技术中文编码字符集》,中国最新的内码字集。与GB 2312完全兼容,与GBK基本兼容,支持Unicode的全部统一汉字。是变长编码方式,可以是1个字节、2个字节和4个字节。

UTF-8编码格式

字节

十六进制

格式

实际编码位

码点范围

1字节

0x0000-0x007F

0xxxxxxx

7

0 ~ 127

2字节

0x0080-0x07FF

110xxxxx 10xxxxxx

11

128 ~ 2047

3字节

0x0800-0xFFFF

1110xxxx 10xxxxxx 10xxxxxx

16

2048 ~ 65535

4字节

0x010000-0x10FFFF

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

21

65536 ~ 2097151

补充:字节顺序(Byte Order)是计算机存储和表示多字节数据的方式,包括大端模式(Big Endian)和小端模式࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yannan20190313

感谢您的支持。祝好心情。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值