UTF-16编码转字符串后无法解码的解决方法咨询
解决AttributeError: str object has no attribute 'decode'问题
你的问题核心是错误地将编码后的bytes对象转成了字符串——a.encode("utf-16")返回的是bytes类型,直接用str()转换后,得到的是bytes的字符串表示(比如b'\xff\xfea\x00p\x00p\x00l\x00e\x00'),这类字符串没有decode方法,自然报错。
下面提供两种解决方式:
1. 最优方案:避免将bytes转成str
直接保留编码后的bytes对象,直接解码即可:
a = "apple" b = a.encode("utf-16") # 直接获取bytes对象,无需转str c = b.decode("utf-16") print(c) # 输出:apple
2. 补救方案:若已转成str,还原为bytes再解码
如果已经把bytes转成了字符串,可以用ast.literal_eval将字符串形式的bytes表示还原为真实的bytes对象,再解码:
import ast a = "apple" b = str(a.encode("utf-16")) # 已转为字符串形式的bytes # 还原为bytes对象 b_bytes = ast.literal_eval(b) c = b_bytes.decode("utf-16") print(c) # 输出:apple
注意:第二种方法仅适用于字符串是标准的bytes repr格式(以
b'开头、'结尾),如果字符串被修改过可能失效,因此优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者OmarBhai
相关产品推荐
相关产品推荐

