一个汉字在python2 和 python3 中分别以 gbk和utf-8中分别占几个字节,和unicode 关系

28 篇文章 0 订阅

汉字编码字节占用情况

Python 2 中的 GBK 编码

在Python 2中,使用GBK编码时,通常一个汉字占用2个字节。

Python 2 中的 UTF-8 编码

在Python 2中,使用UTF-8编码时,一个汉字通常占用3个字节。这是因为UTF-8是一种变长编码,对于不同的字符集有不同的字节长度。对于汉字,UTF-8编码通常需要3个字节。

Python 3 中的 GBK 编码

在Python 3中,你可以通过编码字符串来使用GBK编码。与Python 2相同,使用GBK编码时,一个汉字也是占用2个字节。

Python 3 中的 UTF-8 编码

在Python 3中,UTF-8是默认的字符串编码方式。与Python 2相同,一个汉字在UTF-8编码下占用3个字节。

总结

  1. 在GBK编码中,无论是Python 2还是Python 3,一个汉字都占用2个字节。
  2. 在UTF-8编码中,无论是Python 2还是Python 3,一个汉字通常占用3个字节。

编码方式和字节占用的关系

GBK 编码

GBK编码是一种针对简体中文设计的字符集编码,它扩展了早期的GB2312编码,包含了更多的中文字符。GBK编码使用双字节表示一个汉字,范围从8140FEFE(去除xx7F),每个字节的使用范围从81FE。这种编码方式允许包含更多的汉字字符,但仍然是固定长度的编码,每个汉字都使用2个字节。

UTF-8 编码

UTF-8编码是一种针对Unicode字符集的可变长度字符编码,它可以使用1到4个字节表示一个字符。UTF-8编码的设计目的是保持与ASCII编码的兼容性,同时能够表示所有的Unicode字符。

  • 对于ASCII字符(U+0000至U+007F),UTF-8使用单个字节表示,与ASCII编码相同。
  • 对于其他字符,包括汉字,UTF-8使用2到4个字节表示。大部分常用汉字位于U+0800至U+FFFF这个范围内,这些字符需要3个字节来表示。每个字节的第一个位是控制位,剩下的位用于表示字符本身。

为什么一个汉字在UTF-8中占用3个字节

UTF-8编码使用的字节长度取决于字符的Unicode码点。对于汉字,它们大多数的Unicode码点都在U+0800至U+FFFF之间,这个范围的字符在UTF-8中使用以下格式编码:

  • 第一个字节以1110开头,后面跟着字符的高位。
  • 第二个字节以10开头,后面跟着字符的中位。
  • 第三个字节以10开头,后面跟着字符的低位。

由于汉字的Unicode码点需要较多的位来表示,因此它们不能使用1个或2个字节的UTF-8编码。这就是为什么在UTF-8编码中,一个汉字占用3个字节的原因。

Unicode编码基础

Unicode编码

Unicode是一个国际标准,它为世界上大部分的文字系统提供了一个唯一的数字来表示每一个字符,无论是操作系统、程序还是语言。Unicode旨在解决传统的字符编码方案的局限性,因为这些旧方案通常只能表示少量的字符,并且在不同的编码之间存在兼容性问题。

Unicode与GBK和UTF-8的关系

Unicode与GBK的关系

GBK是针对中文字符集的编码方案,它是在Unicode基础上的一个扩展,允许中文字符使用更简单的双字节编码。GBK并不是Unicode编码,但它与Unicode有对应关系,即每个GBK编码的汉字都可以映射到一个Unicode码点。

Unicode与UTF-8的关系

UTF-8是Unicode的一种实现方式,它是一种变长的编码方式,可以用1到4个字节来表示一个Unicode码点。UTF-8的设计使得它与传统的ASCII编码兼容,即ASCII编码的字符在UTF-8中保持不变,只占用一个字节。

Python中的Unicode

Python 2中的Unicode

在Python 2中,Unicode是通过单独的unicode类型来支持的,它与普通的字符串类型str是分开的。unicode类型是在内存中使用Unicode码点表示字符,而str类型则是使用特定编码(如GBK,UTF-8)表示的字节序列。

Python 3中的Unicode

Python 3将字符串的处理方式进行了重大改革。在Python 3中,所有的字符串都是Unicode字符串,默认使用UTF-8编码。Python 3中的str类型直接支持Unicode,而原来的unicode类型已经不存在,bytes类型用来表示字节序列。

总结

  1. Unicode是一个全球统一的字符集标准,为每个字符分配一个唯一的码点。
  2. GBK是一个针对中文字符的编码方案,与Unicode有对应关系,但不是Unicode编码本身。
  3. UTF-8是Unicode的实现方式之一,它使用可变长度的字节序列来表示Unicode码点。
  4. 在Python 2中,Unicode字符通过unicode类型支持,而在Python 3中,所有字符串都是以Unicode形式处理,使用str类型表示。
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

samoyan

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值