gpt4 book ai didi

python - 为什么空字符串 '' 在 utf-16 中编码为 2 个字节,而在 utf-8 或 ascii 中编码为 0 个字节?

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:00 24 4
gpt4 key购买 nike

我刚开始学习如何在 python 中编码字符串,在稍微弄乱之后,我对空字符串 ('') 的大小在 utf 8 和 ascii 中为 0 但在 utf 16 中为 2 的事实感到困惑?怎么会呢?

print(len(''.encode('utf16'))) # is 2
print(len(''.encode('utf8'))) # is 0

我想问题的很大一部分是我不明白 utf 16 是如何工作的。我不明白为什么在 utf 16 中编码“垃圾邮件”会是 10 个字节长而不是 8 个字节(每个字符 2 个字节(16 位))。我假设 utf 16 中需要 2 个字节作为任何字符串的默认填充或其他内容?

*编辑

我对 UTF 8 或 UTF 16 的工作原理和存储每个字符的不同之处并不感到困惑。我很困惑如何将缺少任何字符(空字符串)存储在 UTF 16 中的 2 个字节中,但在 UTF 8 中有 0 个字节。(而不是 1 个字节或两者都为 0)

该链接没有提供我的问题的答案。

最佳答案

默认情况下,Python 包含一个 Byte Order Mark编码为 UTF-16 时,但编码为 UTF-8 时不。

>>> ''.encode('utf16')
b'\xff\xfe'
>>> ''.encode('utf8')
b''

您可以通过使用 BE (Big-Endian) 或 LE (Little-Endian) 后缀显式指定字节顺序来抑制 BOM。

>>> ''.encode('utf-16-le')
b''

关于python - 为什么空字符串 '' 在 utf-16 中编码为 2 个字节,而在 utf-8 或 ascii 中编码为 0 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122032/

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