我最近在研究一些与编码相关的东西,我对以下内容感到困惑:
看看我有没有
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/