将文本文件转换为十六进制 - 换行问题

问题描述

我正在尝试将文本文件转换为十六进制,然后再转换回文本。只要我不使用换行符,它就可以正常工作。

一个函数获取文件名并返回一个包含代表每个字母的整数的列表。

    block = []
    file = open(filename,'rb')
    content = file.read()
    
    hexstring = binascii.hexlify(content)

    for i in range(0,len(hexstring),2):
        block.append(int(hexstring[i:i+2],base=16))

    return block

这就是我转换回纯文本的方式。


for i in range(len(stringList)):
    tmp = stringList[i]
    for j in range(len(tmp)):
        hexString = str(hex(tmp[j]))
        hexString = hexString.replace('0x','') 
        pt = bytearray.fromhex(hexString).decode()
        plainText.append(pt)

代码很糟糕,但只要我没有换行就可以工作。然后我收到以下错误

pt = bytearray.fromhex(hexString).decode()
ValueError: non-hexadecimal number found in fromhex() arg at position 1

解决方法

尝试使用编解码器模块

import codecs

def encode():
    with open(file='sample.txt') as file:
        text = file.read()
    return codecs.encode(bytes(text,encoding='utf-8'),"hex")

def decode(encodedString):
    return codecs.decode(encodedString,'hex')


a = encode()
b = decode(a)

print(a)
print(b)