es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

problemas de encode() y decode() en Python

¿Alguien puede ayudarme con este problema, por favor? El método de codificación no funciona y no puedo descubrir por qué.

def encode_OctetString(A,flags,data):
    fs="!"+str(len(data))+"s"
    dbg="Formato de codificación de cadena:", fs
    logging.debug(dbg)
    ret=struct.pack(fs,data).encode("hex")
    pktlen=8+len(ret)/2
    return encode_finish(A,flags,pktlen,ret)

Código de error:

File "/home/ubuntu/diameter-test/libDiameter.py", line 434, in encode_OctetString
    ret=struct.pack(fs,data).encode("hex")
struct.error: El argumento para 's' debe ser un objeto bytes
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en el argumento ‘data’ que no es un objeto de bytes como se requiere en el método ‘pack’. Intenta convertir los datos a bytes usando .encode(‘utf-8’) antes de pasarlo al método ‘pack’. Algo como esto:

    def encode_OctetString(A, flags, data):
        data_bytes = data.encode('utf-8')
        fs = "!" + str(len(data_bytes)) + "s"
        logging.debug("Codificando en formato String:", fs)
        ret = struct.pack(fs, data_bytes).hex()
        pktlen = 8 + len(ret) / 2
        return encode_finish(A, flags, pktlen, ret)
    

    Esto debería solucionar el problema y permitirte codificar correctamente la cadena de octetos.

Comments are closed.