我有一个像这样的字符串:
message='भी मिलता था। सरोपा #variable# भेंट करना अब शायद सिर्फ सिख परंपरा में ही बचा समाज की #variable# गहराई नापते रहे हैं गुणाधर'
我已经使用
将该字符串转换为十六进制output = ''.join(hex(ord(c)) for c in message)
output1 = output.replace('0x','0')
,最后十六进制是:
'092d0940020092e093f09320924093e0200925093e096402009380930094b092a093e02002307606107206906106206c065023020092d09470902091f020091509300928093e0200905092c0200936093e092f09260200938093f0930094d092b0200938093f0916020092a09300902092a0930093e020092e0947090202009390940020092c091a093e0200938092e093e091c0200915094002002307606107206906106206c065023020091709390930093e09080200928093e092a09240947020093009390947020093909480902020091709410923093e09270930'
如何从编码的十六进制取回原始字符串?
或如何从输出中取回原始字符串(不替换)?
答案 0 :(得分:2)
binascii库已经具有用于十六进制编码和编码的功能
import binascii
message='भी मिलता था। सरोपा #variable# भेंट करना अब शायद सिर्फ सिख परंपरा में ही बचा समाज की #variable# गहराई नापते रहे हैं गुणाधर'
messageEncoded = binascii.hexlify(message.encode())
print(messageEncoded)
messageDecoded = binascii.unhexlify(messageEncoded)
print(messageDecoded.decode())
答案 1 :(得分:1)
正如已经指定的一些注释,如果将0x
替换为0
,则无法解码,我能得到的最接近的是以下
# Deencoding
hexs = []
tmp = ''
for i in range(len(output1)):
if i < len(output1) - 1 and output1[i] == '0' and output1[i+1] != '0':
hexs.append(tmp)
tmp = ''
else:
tmp += output1[i]
if tmp != '':
hexs.append(tmp)
print(''.join(chr(int(c,16)) for c in hexs[1:]))
哪个会失败,因为您的十六进制代码中有902
,如何确定它是2个字符9
和2
还是仅一个902
? >
如果您可以保留0x
,则可以简单地使用其他命令将int
和chr
取回,如下所示:
print(''.join(chr(int(c, 16)) for c in output[2:].split('0x')))
但是最好的方法可能是使用binascii