了解bytesstr与unicode的区别

Posted qianslup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解bytesstr与unicode的区别相关的知识,希望对你有一定的参考价值。

一、Python2与Python3

Python2与Python3不同。这里主要介绍Python3。

Python3中有两种表示字符序列的类型:bytes和str。

bytes的实例包含原始的8位值;str的实例包含Unicode。

 

二、编码与解码

decode的作用是将其他编码的字符串解码成unicode编码字符串

encode的作用是将unicode编码字符串编码成其他编码的字符串

把Unicode字符(最长见的为utf-8)表示为二进制数据(也就是原始8位值)需要使用encode。反之使用decode。

编写Python程序时,一定要把编码和解码操作放到最外围来做。

程序的核心部分应该使用Unicode字符类型(也就是Python3中的str和Python2中的unicode),而且不要对字符编码做任何假设。

这样既可以令程序接收多种类型的文本编码(例如Latin-1、Shift JIS和Big5),又可以保证输出的文本信息只采用一种编码形式(最好是utf-8)。

 

由于字符类型有别,有时需要进行类型转化。

def to_str(bytes_or_str):
    if isinstance(bytes_or_str, bytes):
        value = bytes_or_str.decode(utf-8)
    else:
        value = bytes_or_str
    return value
def to_bytes(bytes_or_str):
    if isinstance(bytes_or_str, str):
        value = bytes_or_str.encode(utf-8)
    else:
        value = bytes_or_str
    return value

 

三、总结

  • 在Python3中,bytes是一种包含8位值的序列,str是一种包含Unicode字符的序列。不能使用>或+等操作来混同操作bytes和str实例。
  • 在Python2中,str是一种包含8位值的序列,unicode是一种包含Unicode字符的序列。如果str只含7为ASCLL字符,可以通过相关操作符来通时使用str和unicode。
  • 编写Python程序时,一定要把编码和解码操作放到最外围来做。
  • 从文件中读取二进制数据,或向其中写入二进制数据时,总应该以‘rb’或‘wb‘等二进制模式来开启文件。

 

 

 

 

 

 

 

 

 

以上是关于了解bytesstr与unicode的区别的主要内容,如果未能解决你的问题,请参考以下文章

Python 了解 bytes 与 str 的区别

了解python中bytes,str和unicode的区别

Node.js与HTTP响应主体的unicode问题

C++ 下UNICODE编程与多字符集编程有啥区别?

UNICODE与ANSI的区别

UNICODE与ANSI的区别