TypeError: must be str, not bytes

先说下python的版本吧 3.6

1.TypeError: must be str, not bytes错误:

解答: 写文件处 open(filename, 'w').write 应该写为 open(filename, 'wb').write

2.当文本文件里面有中文时,需要进行编码转换,(在网上查了很多都不行)

with open("C://ch.js", encoding="utf-8") as data1:
for oneLine in data1:
print(oneLine)

编码转换:content = str(open(filepath).read(),'gbk').encode('utf8')

当输出多一个b时加个decode(‘utf-8’)即可

3、对于python2中可以直接用的

   如果读取出来是字符型的 例如 tmp= b'/006ae89042325a2c7bb954a762a3d4b5.js'

在python2可以直接用,但是在3中,提示ypeError: must be str, not bytes

  如果直接使用 db.name= str(tmp)。最终的结果是 

db.name='b\'/006ae89042325a2c7bb954a762a3d4b5.js\'' 

最后的其实是 006ae89042325a2c7bb954a762a3d4b5.js‘

正确的方法是二选一

data.name = bytes.decode(tmp)
data.name = str(tmp, encoding='utf-8')


===========
附上str和bytes的转换

hexstr、bytes、str相互转换
h:十六进制编码数字字符串
b:字节字符串
s: 字符串

Str to bytes:
bytes(s, encoding = “utf8”)
str.encode(s)
bytes to str:
str(b, encoding = “utf-8”)
bytes.decode(b)

hexstr to bytes
b = bytes.fromhex(h)
bytes to hexstr
h = b.hex()

str to bytes to hexstr
h = str.encode(s). hex()
hexstr to bites to str
h = bytes.decode(bytes.fromhex(h))

 

上一篇:Error in render: “TypeError: Cannot read property ‘xxxxx‘ of undefined“


下一篇:python 使用pyhook报错TypeError: KeyboardSwitch()