我需要从终端获取一个字符串。有时候,它是gbk,比如:
\77\262\331\327\367我应该怎么做才能得到str的真正含义。如果它是以代码形式存在,则可以正确解码和打印。
inpt=b"\77\262\331\327\367"
print(inpt.decode("gbk"))
inpt=input("input: ")
print(inpt.decode("gbk"))


发布于 2020-06-03 03:35:45
input() function从输入中读取行,将其转换为字符串(去掉尾随的换行符),并返回该字符串。因此,'str' object has no attribute 'decode'消息是非常容易理解的。
您需要从该字符串构建一个bytes对象。下面是我的老式(非Pythonish)解决方案(脚本会产生一些说明性和说明性的输出):
inpt=b"\77\262\331\327\367"
print("\ninpt")
print(type(inpt),"\t",inpt )
print(type(inpt.decode("gbk")),"\t",inpt.decode("gbk"))
inps=r"\77\262\331\327\367" # instead of inps=input("input octals, \\ delimited: ")
print("\ninps")
print(type(inps),"\t",inps )
inpb=b''
for x in list(filter(None, inps.split("\\"))):
inpb+=bytes.fromhex(hex(int(x,8)).replace('0x',''))
print("\ninpb")
print(type(inpb),"\t",inpb )
print(type(inpb.decode("gbk")),"\t",inpb.decode("gbk"))输出:61134038.py
inpt b'?\xb2\xd9\xd7\xf7‘?操作inps \77\262\331\327\367 inpb b‘?\xb2\xd9\xd7\xf7?操作
https://stackoverflow.com/questions/61134038
复制相似问题