SORU
15 Ocak 2009, PERŞEMBE


Kodlama/kod çözme arasındaki fark nedir?

Asla str/unicode kodlama ve kod çözme arasındaki farkı anlamak bu kadar emin olmamıştım.

str().decode() adı kodlamasını unicode dize döndürür verilen belirli bir karakter kodlaması olan bayt dizesi seni bekliyor, biliyorum.

unicode().encode() bayt dize unicode karakter dönüştürür belirli bir kodlama adı göre biliyorum.

Ama str().encode() unicode().decode() ne için olduğunu anlamıyorum. Birisi açıklayabilir ve belki de yanlış yukarıda aldığım başka bir şey değil mi?

DÜZENLEME:

Bazı cevapları .encode bir dize üzerinde ne yaptığı hakkında bilgi ver, ama hiç kimse .decode unicode için ne yaptığını biliyor gibi görünüyor.

CEVAP
16 Ocak 2009, Cuma


Unicode dizeleri decode yöntem gerçekten tüm uygulamaları (nedense bir unicode dizesi metin olmayan bazı veriler olmadığı sürece, aşağıya bakınız) yok. Özellikle tarihsel nedenlerle, sanırım. Python 3'te tamamen gitmiş.

unicode().decode() örtülü bir konser verecekkodlamas varsayılan kullanarak (ascıı) Kodek. Bu gibi doğrulayın:

>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)

>>> s.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)

Hata mesajlarını tam olarak aynıdır.

str().encode() -- tersi için örtülü çalışırkod çözmevarsayılan kodlama ile s:

>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)

Bu şekilde kullanıldığı, str().encode() da gereksiz.

Amaorada başka bir uygulama İkinci yöntem yararlıdır: encodings BU OLAYLA bir ilgin olmadığını karakter kümeleri, ve böylece uygulanabilir 8-bit dizeleri olarak anlamlı bir şekilde

>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'

Haklısın gerçi: "her ikisi için de bu uygulamalar... awkard." kodlama belirsiz kullanımı Yine Python ile byte string ayrı tipte 3, Bu artık bir konudur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christopher Bill

    Christopher

    30 NİSAN 2009
  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007
  • natescamp

    natescamp

    30 NİSAN 2009