decode
(- aşağıya bakın bir nedenle bir unicode dize bazı metin dışı veri yoksa) Unicode dizeleri yöntem gerçekten hiç herhangi bir uygulama bulunmamaktadır. Sanırım, çoğunlukla tarihsel nedenlerden ötürü orada. Python 3'te tamamen gitti.
unicode().decode()
örtülü bir gerçekleştirecek kodlama bölgesinin s
varsayılan (ASCII) codec kullanarak. Bunu şöyle 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ı tamamen aynıdır.
İçin str().encode()
tam tersi - bu örtük bir girişimleri çözme ait s
varsayılan kodlama:
>>> 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ığında, str().encode()
gereksizdir.
Ancak , ikinci yöntemin yararlı olan başka bir uygulaması vardır: karakter kümeleriyle ilgisi olmayan kodlamalar vardır ve bu nedenle 8 bit dizelere anlamlı bir şekilde uygulanabilir:
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
Yine de haklısın: Her iki uygulama için de "kodlamanın" belirsiz kullanımı ... awkard. Yine, Python 3'teki ayrı byte
ve string
türlerle, bu artık bir sorun değildir.