2011-11-21 12 views
14

Jestem trochę zdezorientowany. W Pythonie jaka jest różnica między łańcuchem binarnym, łańcuchem bajtowym, łańcuchem unicode i zwykłym starym łańcuchem (str)? Używam Pythona 2.6.Różnica między ciągiem binarnym, ciągiem bajtowym, ciągiem unicode i zwykłym ciągiem znaków (str)

+1

Należy określić, czy używasz Pythona 2 czy Pythona 3, ponieważ ma to ogromne znaczenie. –

+1

Którą wersję Pythona używasz? I gdzie spotkałeś się z terminem "ciąg binarny" w kontekście Pythona? –

+0

@JohnY Zaktualizowałem pytanie. –

Odpowiedz

18

To zależy od wersji na Pythonie, którego używasz.

W języku Python 2.x jeśli napiszesz 'abc' ma on typ str, ale oznacza to ciąg bajtów. Jeśli chcesz ciąg znaków Unicode, musisz napisać: u'abc'.

W języku Python 3.x, jeśli napiszesz 'abc', nadal ma on typ str, ale teraz oznacza to, że jest ciągiem znaków Unicode. Jeśli chcesz ciąg bajtów, musisz napisać b'abc'. Nie wolno pisać u'abc'.

 | 2.x      | 3.x 
--------+--------------------------+----------------------- 
Bytes | 'abc' <type 'str'>  | b'abc' <type 'bytes'> 
Unicode | u'abc' <type 'unicode'> | 'abc' <type 'str'> 
+0

Dzięki za to. Po prostu rozumiem poprawnie, zasadniczo różnica między ciągiem bajtowym i zwykłym ciągiem jest to, że ciąg bajtowy nie może zawierać znaków Unicode? –

+2

@Imran Azad: Możesz traktować ciąg bajtów jako uporządkowaną listę bajtów - to liczby całkowite od 0 do 255 włącznie. Ciąg znaków Unicode to uporządkowana lista znaków Unicode (liter, cyfr, znaków interpunkcyjnych, małych bałwanów (☃) itd.). Zamieszanie myślę, że pochodzi z Python 2.x traktując ciągi bajtowe, jakby były ciągi znaków. To prawie działa, z wyjątkiem sytuacji, gdy zaczynasz używać znaków spoza zakresu ASCII, masz problemy. –

+0

Ah Widzę, dzięki. –

Powiązane problemy