string和字节string有什么区别?
我正在与一个库返回一个字节string,我需要将其转换为一个string。
虽然我不确定有什么区别 – 如果有的话。
假设Python 3(在Python 2中,这个区别有点不太明确) – 一个string是一个字符序列,即unicode codepoints ; 这些是一个抽象的概念,不能直接存储在磁盘上。 一个字节string是一个字节序列,不出所料, 可以存储在磁盘上。 它们之间的映射是一种编码 – 其中有相当多的(并且无限多)是可能的),并且为了进行转换,您需要知道在特定情况下适用哪种转换,因为不同的编码可能映射相同的字节到另一个string:
>>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-16') '蓏콯캁澽苏' >>> b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'.decode('utf-8') 'τoρνoς'
一旦你知道使用哪一个,你可以使用字节string的.decode()
方法从上面得到正确的string。 为了完整.encode()
,string的.encode()
方法是相反的:
>>> 'τoρνoς'.encode('utf-8') b'\xcf\x84o\xcf\x81\xce\xbdo\xcf\x82'
计算机唯一可以存储的是字节。
要在计算机中存储任何内容,必须先对其进行编码 ,即将其转换为字节。 例如:
- 如果你想存储音乐,你必须先使用
MP3
,WAV
等编码 - 如果要存储图片,则必须先使用
PNG
,JPEG
等对其进行编码 - 如果要存储文本,则必须先使用
ASCII
,UTF-8
等对其进行编码
MP3
, WAV
, PNG
, JPEG
, ASCII
和UTF-8
是编码的例子。 编码是以字节表示audio,图像,文本等的格式。
在Python中,一个字节string就是:一个字节序列。 这是不可读的。 在引擎盖下,所有东西都必须先转换成一个字节string,然后才能存储在计算机中。
另一方面,通常被称为“string”的string是一系列字符。 这是人类可读的。 string不能直接存储在计算机中,必须先编码 (转换为字节string)。 有多种编码可以将string转换为string,例如ASCII
和UTF-8
。
'I am a string'.encode('ASCII')
上面的Python代码将使用编码ASCII
对string'I am a string'
进行编码。 上述代码的结果将是一个字节string。 如果你打印它,Python会将其表示为b'I am a string'
。 但是请记住,字节string不是人类可读的 ,只是Python在打印时将它们解码为ASCII
。 在Python中,一个字节string由b
表示,随后是字节string的ASCII
表示。
如果您知道用于对其进行编码的编码,则可以将字节string解码回string。
b'I am a string'.decode('ASCII')
上面的代码将返回原始string'I am a string'
。
编码和解码是相反的操作。 在写入磁盘之前,所有东西都必须进行编码,并且必须先解码才能被人读取。
从什么是Unicode :
从根本上讲,电脑只是处理数字。 他们通过为每一个分配一个数字来存储字母和其他字符。
……
Unicode为每个字符提供了一个唯一的编号,不pipe是什么平台,不pipe是什么程序,不pipe什么语言。
所以当一台计算机代表一个string时,它会通过唯一的Unicode号码find存储在string计算机中的字符,并将这些数字存储在内存中。 但是您不能直接将string写入磁盘或通过其唯一的Unicode号码在networking上传输string,因为这些数字只是简单的十进制数字。 您应该将string编码为字节string,例如UTF-8
。 UTF-8
是一种字符编码,能够编码所有可能的字符,并将字符存储为字节(看起来像这样 )。 所以编码的string可以在任何地方使用,因为UTF-8
几乎在任何地方都被支持。 当您从其他系统打开以UTF-8
编码的文本文件时,您的计算机将通过其唯一的Unicode编码对其进行解码并在其中显示字符。 当浏览器接收到来自networking的编码为UTF-8
string数据时,它将把数据解码为string(假设浏览器采用UTF-8
编码)并显示string。
在python3中,可以将string和字节string互相转换:
>>> print('中文'.encode('utf-8')) b'\xe4\xb8\xad\xe6\x96\x87' >>> print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))中文
总之,string是为了让人们在计算机上阅读,字节串用于存储到磁盘和数据传输。
在Python 2中 , str
由8位值序列组成, unicode
由Unicode字符序列组成。 有一件事要记住, str
和unicode
可以和运算符一起使用,如果str
只包含7位的ASCI字符。
在Python 3中 , bytes
由8位值序列组成,而str
由Unicode字符序列组成。 bytes
和str
不能和运算符(如>
或+
一起使用。
在Python 2中使用助手函数在str
和unicode
之间转换,在Python 3中在bytes
和str
之间转换可能是有用的。
str(b'Text', encoding)
选中此项: 将字节转换为Pythonstring