Python中的字节和字符串

本文最后更新于2019年6月16日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

整理总结一下最近遇到比较多的Python中字节和字符串之间的小知识点,方便以后快速参考、学习。

正文:

参考解答:
Python 3中的bytes和str类型

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。这是件好事。

字符串可以编码encode()成字节包,而字节包可以解码decode()成字符串

# Python 3 交互终端
>>> website = 'https://ixyzero.com/blog/'
>>> type(website)
<class 'str'>
>>> website
'https://ixyzero.com/blog/'

# 将 string 转换成 bytes ,使用 .encode() 方法
>>> website_bytes_utf8 = website.encode(encoding="utf-8")
>>> type(website_bytes_utf8)
<class 'bytes'>
>>> website_bytes_utf8
b'https://ixyzero.com/blog/'

# 将 bytes 转换成 string ,使用 .decode() 方法
>>> website_string = website_bytes_utf8.decode()
>>> type(website_string)
<class 'str'>
>>> website_string
'https://ixyzero.com/blog/'
>>>

&

>>> b"abcde"
b'abcde'

# utf-8 is used here because it is a very common encoding, but you
# need to use the encoding your data is actually in.
>>> b"abcde".decode("utf-8") 
'abcde'

Python中如何获取某个字符串的「字节长度」?(python get string byte length)

def utf8len(s):
    return len(s.encode('utf-8'))

&

# getsizeof(object, default) -> int
# Return the size of object in bytes.
# 这种方法获取的是Python对象的bytes大小,和我们期望的效果并不相同,而且不同版本、系统的值也并不一致
import sys
sys.getsizeof(s)

>>> len("hello".encode("utf8"))
5
>>> len("你好".encode("utf8"))
6

####
Python 2.7.10 (default, Aug 17 2018, 19:45:58)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf-8')
>>>
>>> utf8len('你好')
6
>>> utf8len('hello')
5
>>> sys.getsizeof('你好')
43
>>>
>>> sys.getsizeof('hello')
42
>>>

####
Python 3.6.5 (default, Apr 10 2018, 20:17:30)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getsizeof('你好')
78
>>> sys.getsizeof('hello')
54
>>>
>>> utf8len('你好')
6
>>> utf8len('hello')
5
>>>
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4466.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注