Woo*_*Cho 2 python utf-8 utf-16 utf python-3.x
我刚刚学习了 python 中的字符串编码,在稍微摆弄了一下之后,我对空字符串 ('') 的大小在 utf 8 和 ascii 中为 0 但在 utf 16 中为 2 感到困惑?怎么会?
print(len(''.encode('utf16'))) # is 2
print(len(''.encode('utf8'))) # is 0
Run Code Online (Sandbox Code Playgroud)
我想问题的很大一部分是我不明白 utf 16 是如何工作的。我不明白为什么用 utf 16 编码“垃圾邮件”会是 10 个字节长,而不是 8 个字节(每个字符 2 个字节(16 位))。我假设 utf 16 中需要 2 个字节作为任何字符串的默认填充或其他内容?
*编辑
我对 UTF 8 或 UTF 16 的工作原理以及存储每个单独字符的不同之处并不感到困惑。我很困惑如何将缺少任何字符(空字符串)存储在 UTF 16 中的 2 个字节中,但在 UTF 8 中存储为 0 字节。(而不是两者都存储为 1 字节或 0)
该链接没有提供我的问题的答案。
默认情况下,Python在编码为 UTF-16 时包含字节顺序标记,但在编码为 UTF-8 时则不包含。
>>> ''.encode('utf16')
b'\xff\xfe'
>>> ''.encode('utf8')
b''
Run Code Online (Sandbox Code Playgroud)
BE您可以通过使用(Big-Endian) 或(Little-Endian) 后缀显式指定字节顺序来抑制 BOM LE。
>>> ''.encode('utf-16-le')
b''
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |