【发布时间】:2021-03-19 17:44:39
【问题描述】:
我尝试了许多解决方案,并且阅读了许多网站,但我似乎无法解决这个问题。我有一个包含消息对象的文件。每条消息都有一个 4 字节的值,即消息类型,一个 4 字节的值,即长度,然后是 Unicode 中的 ASCII 消息数据。当我打印到屏幕上时,它看起来像 ASCII。当我将输出定向到一个文件时,我得到了 Unicode,所以我尝试解码所有这些的方式有些不对劲。 这是python脚本:
import sys
import codecs
import encodings.idna
import unicodedata
def getHeader(fileObj):
mstype_array = bytearray(4)
mslen_array = bytearray(4)
mstype = 0
mslen = 0
fileObj.seek(-1, 1)
mstype_array = fileObj.read(4)
mslen_array = fileObj.read(4)
mstype = int.from_bytes(mstype_array, byteorder=sys.byteorder)
mslen = int.from_bytes(mslen_array, byteorder=sys.byteorder)
return mstype,mslen
def getMessage(fileObj, count):
str = fileObj.read(count)#.decode("utf-8", "strict")
return str
def getFields(msg):
msg = codecs.decode(msg, 'utf-8')
fields = msg.split(';')
return fields
mstype = 0
mslen = 0
with open('../putty.log', 'rb') as f:
while True:
byte = f.read(1)
if not byte:
break
if byte == b'\x1D':
mstype, mslen = getHeader(f)
print (f"Msg Type: {mstype} Msg Len: {mslen}")
msg = getMessage(f, mslen)
print(f"Message: {codecs.decode(msg, 'utf-8')}")
#print(type(msg))
fields = getFields(msg)
print("Fields:")
for field in fields:
print(field)
else:
print (f"Char read: {byte} {hex(ord(byte))}")
使用可以使用这个link来获取要解码的文件。
【问题讨论】:
-
您提供的链接受密码保护。
标签: python python-3.x python-unicode