2011-11-21 35 views
14

Tôi hơi bối rối. Trong Python sự khác nhau giữa một chuỗi nhị phân, chuỗi byte, chuỗi unicode và một chuỗi cũ (str) là gì? Tôi đang sử dụng Python 2.6.Sự khác biệt giữa chuỗi nhị phân, chuỗi byte, chuỗi unicode và chuỗi thông thường (str)

+1

Bạn nên chỉ định bạn đang sử dụng Python 2 hay Python 3 vì nó tạo sự khác biệt lớn. –

+1

Bạn đang sử dụng phiên bản Python nào? Và bạn đã gặp phải thuật ngữ "chuỗi nhị phân" trong ngữ cảnh của Python ở đâu? –

+0

@JohnY Tôi đã cập nhật câu hỏi. –

Trả lời

18

Tùy thuộc vào phiên bản trên Python bạn đang sử dụng.

Trong Python 2.x nếu bạn viết 'abc', nó có loại str nhưng điều này có nghĩa là một chuỗi byte. Nếu bạn muốn có một chuỗi Unicode, bạn phải viết u'abc'.

Trong Python 3.x nếu bạn viết 'abc' nó vẫn có loại str nhưng bây giờ điều này có nghĩa là một chuỗi ký tự Unicode. Nếu bạn muốn một chuỗi byte, bạn phải viết b'abc'. Không được phép viết u'abc'.

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

Cảm ơn vì điều đó. Chỉ vì vậy tôi hiểu đúng, về cơ bản sự khác biệt giữa một chuỗi byte và một chuỗi bình thường là một chuỗi byte không thể chứa các ký tự unicode? –

+2

@Imran Azad: Bạn có thể nghĩ chuỗi byte là danh sách thứ tự các byte - đó là số nguyên từ 0 đến 255. Một chuỗi Unicode là một danh sách thứ tự các ký tự Unicode (chữ cái, số, dấu chấm câu, những người tuyết nhỏ xíu (☃), v.v.). Sự nhầm lẫn tôi nghĩ đến từ Python 2.x xử lý các chuỗi byte như thể chúng là các chuỗi ký tự. Điều đó gần như hoạt động, ngoại trừ khi bạn bắt đầu sử dụng các ký tự bên ngoài phạm vi ASCII, bạn gặp vấn đề. –

+0

Ah tôi hiểu rồi, cảm ơn. –

Các vấn đề liên quan