我只是在学习有关在python中编码字符串的知识,对它有点烦躁之后,我对以下事实感到困惑:在utf 8和ascii中,空字符串('')的大小为0,而在utf 16中则为2 ?怎么来的?
from matplotlib import pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))
pd.value_counts(df['Country']).plot('barh', ax=ax1)
pd.value_counts(df['Company']).plot('barh', ax=ax2)
我想问题的很大一部分是我不了解utf 16的工作原理。我不明白为什么在utf 16中编码“垃圾邮件”会长10个字节,而不是8个字节(每个字符2个字节(16位))。我假设在utf 16中默认需要2个字节作为填充字符串或其他东西的默认值?
*编辑
对于UTF 8或UTF 16的工作原理,我并不感到困惑,在存储每个字符方面也有所不同。我对缺少任何字符(一个空字符串)如何存储在UTF 16中的2个字节中但在UTF 8中具有0个字节的情况感到困惑(相对于两者均为1字节或0)
该链接未提供我问题的答案。
答案 0 :(得分:4)
默认情况下,Python编码为UTF-16时包含Byte Order Mark,但编码为UTF-8时不包含。{p>
>>> ''.encode('utf16')
b'\xff\xfe'
>>> ''.encode('utf8')
b''
您可以通过使用BE
(大尾数)或LE
(小尾数)后缀明确指定字节顺序来取消BOM。
>>> ''.encode('utf-16-le')
b''