Python: Obtener el tamaño de la cadena en bytes

Tengo una cadena que se va a enviar a través de una red. Necesito verificar los bytes totales en los que está representado.

sys.getsizeof(string_name) devuelve bytes extra. Por ejemplo, para sys.getsizeof("a") devuelve 22, mientras que un carácter solo se representa en 1 byte en python. ¿Hay algún otro método para encontrar esto?

Si desea el número de bytes en una cadena, esta función debería hacerlo por usted bastante sólidamente.

 def utf8len(s): return len(s.encode('utf-8')) 

La razón por la que obtuviste números extraños es porque encapsulada en una cadena es un montón de otra información debido al hecho de que las cadenas son objetos reales en Python.

Es interesante porque si miras mi solución para codificar la cadena en ‘utf-8’, hay un método de ‘encoding’ en el objeto ‘s’ (que es una cadena). Bueno, necesita ser almacenado en algún lugar ¿no? Por lo tanto, el recuento de bytes más alto de lo normal. Se incluye ese método, junto con algunos otros :).

Hay una advertencia a la respuesta aceptada.

Para algunas codificaciones de múltiples bytes (por ejemplo, utf-16), string.encode agregará una Marca de orden de bytes (BOM) al comienzo, que es una secuencia de bytes especiales que informan al lector sobre la endianidad de bytes utilizada. Así que la longitud que obtienes es en realidad len(BOM) + len(encoded_word) .

Si no quiere contar los bytes de la lista de materiales, puede usar la versión little-endian de la encoding (agregando el sufijo “-le”) o la versión big-endian (agregando el sufijo “be”).

 >>> len('ciao'.encode('utf-16')) 10 >>> len('ciao'.encode('utf-16-le')) 8