gpt4 book ai didi

python - len(unicode 字符串)

转载 作者:行者123 更新时间:2023-12-05 07:47:23 29 4
gpt4 key购买 nike

>>> c='中文'
>>> c
'\xe4\xb8\xad\xe6\x96\x87'
>>> len(c)
6
>>> cu=u'中文'
>>> cu
u'\u4e2d\u6587'
>>> len(cu)
2
>>> s='𤭢'
>>> s
'\xf0\xa4\xad\xa2'
>>> len(s)
4
>>> su=u'𤭢'
>>> su
u'\U00024b62'
>>> len(su)
2
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'UTF-8'

首先,我想弄清楚一些概念。我了解到像 cu=u'中文' 这样的 unicode 字符串实际上是由 python shell 默认以 UTF-16 编码的。正确的? 那么,当我们看到 '\u*' 时,实际上是 UTF-16 编码?而'\u4e2d\u6587'是unicode串还是byte串?但是cu要存入内存,所以

0100 1110 0010 1101 0110 0101 1000 0111

(convert\u4e2d\u6587 to binary) 是 cu 保留的形式,如果是字节串? 我说得对吗?

但不能是字节串。否则len(cu)不可能是2,应该是4!!所以它必须是unicode字符串。 但是!!!我也learned那个

python attempts to implicitly encode the Unicode string with whatever scheme is currently set in sys.stdout.encoding, in this instance it's "UTF-8".

>>> cu.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'

所以! len(cu) == 2 怎么可能???是因为里面有两个'\u'吗?

但这并不能使 len(su) == 2 有意义!

我错过了什么吗?

我正在使用 python 2.7.12

最佳答案

Python unicode 类型包含 Unicode 代码点,并不意味着是一种编码。 Python 如何在内部执行此操作是一个实现细节,而不是您在大多数情况下需要关心的事情。它们不是 UTF-16 代码单元,因为 UTF-16 是另一种可用于对 Unicode 文本进行编码的编解码器,就像 UTF-8 一样。

这里最重要的是标准的 Python str 对象包含 bytes,它可能包含也可能不包含编码为特定编解码器的文本(您的示例使用 UTF- 8 但这不是给定的),unicode 包含 Unicode 代码点。在交互式解释器 session 中,终端的编解码器确定 Python 接收哪些字节(然后在创建 u 时使用 sys.stdin.encoding 根据需要解码这些字节'...' unicode 对象)。

只有当写入sys.stdout(比如,当使用print)时,sys.stdout.encoding 值开始发挥作用,Python 将再次自动对您的 Unicode 字符串进行编码。只有然后您的 2 个 Unicode 代码点将再次编码为 UTF-8 并写入您的终端,终端知道如何解释它们。

你可能想阅读有关 Python 和 Unicode 的内容,我推荐:

关于python - len(unicode 字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39835779/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com