Soru Python: Dize boyutunu bayt cinsinden alın


Bir ağ üzerinden gönderilecek bir dizim var. Temsil edilen toplam baytları kontrol etmem gerekiyor.

sys.getsizeof(string_name) fazladan bayt döndürür. Örneğin sys.getsizeof("a") Bir karakter yalnızca python'da 1 bayt olarak gösterilirken 22 değerini döndürür. Bunu bulmak için başka bir yöntem var mı?


27
2018-06-06 19:23


Menşei


Python'un hangi sürümünü kullanıyorsunuz? - squiguy
Çünkü "a" dizesi, pythonda fazladan bilgi içeren bir nesnedir. - Kris
@Some Geliştirici, tüm nesnenin fazladan bilgisi olmadan yalnızca dizgiye yönelik bayt elde etmenin bir yolu var mı? - Iffat Fatima
@squiguy Benim python sürümüm 2.7.9 - Iffat Fatima


Cevaplar:


Bir dizede bayt sayısını istiyorsanız, bu işlev sizin için oldukça sağlam bir şekilde yapmalıdır.

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

Tuhaf sayılara sahip olmanızın nedeni, bir dizede kapsüllenmiş olmanın, dizelerin python'daki gerçek nesneler olması nedeniyle bir takım başka bilgiler olmasıdır.

Onun ilginç, çünkü 'utf-8' içine dize kodlamak için benim çözümüme bakarsanız, 's' nesnesi üzerinde bir 'kodlama' yöntemi var (bir dizedir). Peki, bir yerde saklanmalı mı? Bu nedenle normal bayt sayısından daha yüksek. Bu yöntem dahil, birkaç diğerleri ile birlikte :).


42
2018-06-06 19:28



Bu çalıştı: ') Çok teşekkür ederim - Iffat Fatima
Telaşa gerek yok. Bazen basit cevaplar görünüşte garip problemlere yol açarlar haha. - Kris
Belirli girdilerde neden hatalarını kodlamayacak? - Padraic Cunningham
Neden ilk olarak utf-8 kodlamasına ihtiyacımız var? - 2rs2ts
Kodlamanın nedeni, Python 3'te, bazı tek karakterli dizelerin temsil edilecek çoklu bayt gerektirmesidir. Örneğin: len('你'.encode('utf-8')). - Brad Solomon