先说下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))