python - 将非 ascii 字符分配给 python 内置字符串时,该值意味着什么?

标签 python string unicode encoding utf-8

我最近在研究一些与编码相关的东西,我对以下内容感到困惑:

看看我有没有

a = "哈"  ## whatever non-ascii char is fine
a[0] ## = "\xe5"
a[1] ## = "\x93"
a[2] ## = "\x88"

len(a) 将为 3,每个值将为“\xe5”、“\x93”和“\x88”

我明白如果我这样做:

a.decode("utf-8") ## = u"\u54c8"

它将成为一个unicode字符串,代码点将为“\u54c8”。 问题是:python内置的字符串使用什么编码方式? 为什么a[0] 不是“\x54”,a[1] 不是“\xc8”,这样它们加起来就是“54c8”?

我猜内置 python str 中的编码不应该是 utf-8,因为正确的 utf-8 代码点应该是“\u54c8”。是这样吗?

最佳答案

UTF-8 和 Unicode 不是一回事。 Unicode 是整数值到字符的抽象映射; UTF-8 是将这些整数表示为字节序列的一种特殊方式。 \xe5\x93\x88是整数0x54c8的三字节UTF-8编码,无法用单个字节表示。

Python 2 中的默认编码是 ISO-8859,但在 Python 3 中更改为 UTF-8。

关于python - 将非 ascii 字符分配给 python 内置字符串时,该值意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498141/

相关文章:

c# - 输入特定字符的文本框问题

unicode - 使用 (Core)Foundation 折叠/规范化连字(例如 Æ 到 ae)

python - 将 python 中的循环替换为相当于 matlab 查找的循环

python - 装饰器使用 for 循环但不使用 while 循环

python - 无法导入 rest_framework_simplejwt

python - 如何使用python在selenium中的字符串中获取img src

java - 如何在 Scala 中使用 java.String.format?

c++ - std::exception 子类,字符串成员变量

java - 检查字符串后面是否有字符串

unicode - ID3v2.3 标签中的文本编码