2016-09-24 42 views
0

我是python的初学者,遇到了一章,内容如下:原始字节值与Unicode文本?

在Python 3.X中,普通的str字符串处理Unicode文本(包括ASCII,它只是一种简单的Unicode);一个独特的字节字符串类型表示原始字节值(包括媒体和编码文本);

我明白了什么是Unicode文本,但什么值是原始字节?

回答

0

原始字节可以是你希望他们是什么。一个字节被限制为0-255(十六进制00-FF),所以不止一个字节必须被程序解释为有意义的。

给出的字节串b'\x41\x42\x43\x44',这可能是一个小端整数

>>> int.from_bytes(raw,'little') 
1145258561 
>>> hex(int.from_bytes(raw,'little')) 
'0x44434241' 

或者大结束的整数:

>>> hex(int.from_bytes(raw,'big')) 
'0x41424344' 

还是一个UTF-8编码的Unicode字符串:

>>> raw.decode('utf8') 
'ABCD' 

或两个little-endian的16位无符号整数:

>>> struct.unpack('HH',raw) 
(16961, 17475) 
>>> list(map(hex,struct.unpack('HH',raw))) 
['0x4241', '0x4443'] 

这只是数据。这取决于程序决定数据的含义。

字节字符串可以通过TCP套接字发送或读取或写入到文件中。 Unicode文本不能。它必须先被编码为字节。

+0

如果是的话,可以在媒体和编码的文本,而不是被Unicode文本处理? – Sarang

+1

*编码*文本是字节。 *解码*文本是Unicode。您只能将文件存储在文件(媒体或其他文件)中,并且在读取之后必须知道编码以将其解码为Unicode文本。 –

+1

@Sarang请参阅http://nedbatchelder.com/text/unipain.html和http://www.joelonsoftware.com/articles/Unicode.html以获取更多关于差异的解释。 –