Python有两种类型可以表示字符序列:一种是bytes,另一种是str。bytes实例包含的是原始数据,即8位的无符号值(通常按照ASCII编码标准来显示)。str实例包含的是Unicode码点(code point,也叫作代码点)。
注意点:
1,bytes和str并不兼容。在传递字符序列的时候需要注意。
a = b"h\x65llo" b = "world" # 可行的 print("%s" % a) # b'hello', 可行原因:执行print时,会调用bytes的__repr__方法; # 而type(repr(bytes))是str类型,所以可替换%s # 不可行 print(b"%s" % b) # TypeError: %b requires a bytes-like object, # or an object that implements __bytes__, not 'str' # 不可行原因:不知道str应该按照什么方案来编码 print(a + b) # TypeError: can't concat str to bytes
2,操作文件时,需要注意编码格式。
with open('file/student.bin', 'r') as f: print(f.read()) # UnicodeDecodeError: # 'utf-8' codec can't decode byte 0x87 in position 10: invalid start byte
原因:r默认是以文本方式读取,默认编码为utf-8,当文件不为utf-8格式时,就会异常
两种解决方式:
1,使用rb进行读取;
2,指定encoding编码格式;
标签:__,utf,Effective,Python,bytes,str,print From: https://www.cnblogs.com/guo126/p/18138980