py3为什么str要用unicode而不用utf8?

py3为什么str要用unicode而不用utf8?

在其它博客上看到这样的话

python3中str默认为Unicode的编码格式
Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等
所以在Python3中必须将str类型转换成bytes类型的
在Python中使用encode的方式可以进行字符的编码

问题1:
那既然如此, str为啥不直接用utf8呢? 毕竟py3代码文件的编码都已经改为默认utf8了,
str用unicode编码为bytes存在内存里很大呀, 毕竟两个字节起步, 用utf8不香吗?

上面其它博客里还有一句话, 我感觉有点问题

Unicode是一32位编码格式

问题2:
unicode不是utf16吗? 那应该是16位编码格式吧


回答:

简单地回答:

答1:str 默认是用的 utf-8 解码器, str 的内存表示参考 PEP 393。
答2:unicode 不是 utf-16,utf-16 是一种 unicode 编码格式。


一般说的 Unicode 其实包含了下面的部分:

  • 字符集、码点(Code Point)
  • 编码实现(UTF-16、UTF-32、UTF-8等,UTF 意为 Unicode Transformation Format)
  • 其他无关部分略去

一般我们说用 Unicode 编码是不够准确的,因为我们实际用的是 UTF ,Unicode 转换格式,是计算机中编码和表示码点的具体格式。

摘一段 Unicode 规范文档 2.5 节 Encoding Forms

Actual implementations in computer systems represent integers in specific code units of
particular size—usually 8-bit (= byte), 16-bit, or 32-bit. In the Unicode character encoding
model, precisely defined encoding forms specify how each integer (code point) for a Unicode character is to be expressed as a sequence of one or more code units. The Unicode
Standard provides three distinct encoding forms for Unicode characters, using 8-bit, 16-
bit, and 32-bit units. These are named UTF-8, UTF-16, and UTF-32, respectively. The
“UTF” is a carryover from earlier terminology meaning Unicode (or UCS) Transformation
Format. Each of these three encoding forms is an equally legitimate mechanism for representing Unicode characters; each has advantages in different environments.

Unicode 规定了字符集、码点、编码方式,这些共同组成 Unicode 标准。

你说的 UTF-16,和 UTF-8 一样,只是一种编码方式,摘 Unicode 规范的 3.9 节 Unicode Encoding Forms:

The Unicode Standard supports three character encoding forms: UTF-32, UTF-16, and
UTF-8. Each encoding form maps the Unicode code points U+0000..U+D7FF and
U+E000..U+10FFFF to unique code unit sequences. The size of the code unit is specified
for each encoding form. This section presents the formal definition of each of these encoding forms

再回头说 Python 的 Unicode,推荐读 Howto: Unicode 指南 ,有官中。

以上是 py3为什么str要用unicode而不用utf8? 的全部内容, 来源链接: utcz.com/p/938012.html

回到顶部