当我执行以下查询时:
SELECT HEX(FILL),ID FROM dbo.table WHERE FILL <> ''
它给我以下结果:
404040404040404000000F40404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040
当我像这样修改我的查询时
SELECT FILL,ID FROM dbo.table WHERE FILL <> ''
我得到的结果如图所示:
使用此网址进行转换:https://codebeautify.org/hex-string-converter
上述网址未给出正确的预期结果。所以我使用了Python。
这是我的python代码转换为可读格式:
import base64
hex_data ='404040404040404000000F40404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040'
ascii_string = str(base64.b16decode(hex_data))[2:-1]
print (ascii_string)
我得到的结果是:
@@@@@@@@\x00\x00\x0f@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
如何使字符串可读(我想读简单的英文字符)?
答案 0 :(得分:0)
您通过将bytes value传递给str()
来修改SI (shift-in)。
通过bytes
对象传递str()
,您可以生成字节对象的表示。表示也是一个字符串也是巧合。
您最多可以使用解码方法解码字节到文本:
bytes_object = base64.b16decode(hex_data)
text_object = bytes_object.decode('latin1')
我使用Latin-1(ISO-8859-1)来解码数据,因为它可能不是ASCII数据。大多数ASCII文本开头都不使用NULL或live example字节。 ASCII也可以工作,但只要你有超出0x00-0x7F范围的任何数据,你就会收到错误。
您找到的十六进制字符串转换器也包含NULL和SI字节,但它们不可打印,因此您的浏览器不会显示它们。如果您使用print()
,则很可能您的终端也不会显示它们:
>>> import base64
>>> hex_data ='404040404040404000000F40404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040'
>>> bytes_object = base64.b16decode(hex_data)
>>> text_object = bytes_object.decode('latin1')
>>> text_object
'@@@@@@@@\x00\x00\x0f@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
>>> print(text_object)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
答案 1 :(得分:-1)
>>> binascii.unhexlify('404040404040404000000F40404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040')
'@@@@@@@@\x00\x00\x0f@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
当然,您也可以将查询更改为而不是十六进制编码字段:
SELECT FILL,ID FROM dbo.table WHERE FILL <> ''
这似乎是一个更好的解决方案。