Python 3.x tạo ra sự khác biệt rõ ràng giữa các loại:
- str = NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 0 nghĩa đen = một chuỗi các ký tự unicode (Latin-1, UCS-2 hoặc UCS-4, tùy thuộc vào ký tự rộng nhất trong chuỗi)
- NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1 = NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 2 nghĩa đen = một chuỗi octet (số nguyên từ 0 đến 255)
Nếu bạn quen thuộc với:
- Java hoặc C#, nghĩ về str là NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 4 và NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1 là NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 6;
- SQL, nghĩ về str là NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 8 và NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1 là >>> '\uFEFF'.encode('UTF-8') b'\xef\xbb\xbf' 0 hoặc >>> '\uFEFF'.encode('UTF-8') b'\xef\xbb\xbf' 1;
- Windows Registry, nghĩ về str là >>> '\uFEFF'.encode('UTF-8') b'\xef\xbb\xbf' 3 và NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1 là >>> '\uFEFF'.encode('UTF-8') b'\xef\xbb\xbf' 5.
Nếu bạn quen thuộc với C (++), thì hãy quên mọi thứ bạn đã học về >>> '\uFEFF'.encode('UTF-8') b'\xef\xbb\xbf' 6 và chuỗi, bởi vì một nhân vật không phải là một byte. Ý tưởng đó đã lỗi thời.a character is not a byte. That idea is long obsolete.
Bạn sử dụng str khi bạn muốn đại diện cho văn bản.
print('שלום עולם')Bạn sử dụng NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1 khi bạn muốn biểu diễn dữ liệu nhị phân cấp thấp như các cấu trúc.
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]Bạn có thể mã hóa một đối tượng str thành một đối tượng NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1.
>>> '\uFEFF'.encode('UTF-8') b'\xef\xbb\xbf'Và bạn có thể giải mã NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1 thành str.
>>> b'\xE2\x82\xAC'.decode('UTF-8') '€'Nhưng bạn không thể tự do trộn hai loại.
>>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to strKý hiệu NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 2 có phần khó hiểu ở chỗ nó cho phép các byte 0x01-0x7f được chỉ định với các ký tự ASCII thay vì số HEX.
>>> b'A' == b'\x41' TrueNhưng tôi phải nhấn mạnh, một nhân vật không phải là một byte.a character is not a byte.
>>> 'A' == b'A' FalseTrong Python 2.x
Các phiên bản Pre-3.0 của Python thiếu loại khác biệt giữa dữ liệu văn bản và nhị phân. Thay vào đó, có:
- >>> b'\xE2\x82\xAC'.decode('UTF-8') '€' 4 = >>> b'\xE2\x82\xAC'.decode('UTF-8') '€' 5 LIÊN QUAN = Trình tự các ký tự Unicode = 3.x str
- A
- Thông thường văn bản, được mã hóa trong một số mã hóa không xác định.
- Nhưng cũng được sử dụng để đại diện cho dữ liệu nhị phân như đầu ra >>> b'\xE2\x82\xAC'.decode('UTF-8') '€' 9.
Để giảm bớt quá trình chuyển đổi 2.x sang-3.x, cú pháp theo nghĩa đen NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 2 đã được đưa vào Python 2.6, để cho phép phân biệt các chuỗi nhị phân (phải là NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 1 trong 3.x) với các chuỗi văn bản (nên được str trong 3.x). Tiền tố >>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str 3 không có gì trong 2.x, nhưng cho biết tập lệnh >>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str 4 không chuyển đổi nó thành chuỗi unicode trong 3.x.
Vì vậy, có, NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0] 2 nghĩa đen trong Python có cùng mục đích mà họ làm trong PHP.
Ngoài ra, chỉ vì tò mò, có nhiều biểu tượng hơn B và U làm những việc khác không?
Tiền tố >>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str 6 tạo ra một chuỗi thô (ví dụ: >>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str 7 là dấu gạch chéo ngược + >>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str 8 thay vì một tab) và trích dẫn ba >>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str 9 hoặc >>> b'A' == b'\x41' True 0 cho phép các chuỗi chuỗi đa dòng.
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọcb‘ character before a string is used to specify the string as a “byte string“.
Bàn luận
Trong Python, ký tự ‘B‘ trước một chuỗi được sử dụng để chỉ định chuỗi dưới dạng chuỗi byte Byte. & NBSP;
Ví dụ:b_str doesn’t store a String object, instead, it stores a Byte String object.
b_str = b hèhey Tôi là một chuỗi byte
Bây giờ, B_STR doesn lưu trữ một đối tượng chuỗi, thay vào đó, nó lưu trữ một đối tượng chuỗi byte.Byte strings are strings that are in bytes. Generally, strings are converted to bytes first just like any other object because a computer can store data only in bytes. When working with byte strings, they are not converted into bytes as they are already in bytes.
Sự khác biệt giữa chuỗi và chuỗi byte:
Chuỗi là ký tự bình thường ở định dạng có thể đọc được trong khi các chuỗi byte là các chuỗi có trong byte. Nói chung, các chuỗi được chuyển đổi thành byte trước tiên giống như bất kỳ đối tượng nào khác vì máy tính chỉ có thể lưu trữ dữ liệu bằng byte. Khi làm việc với các chuỗi byte, chúng không được chuyển đổi thành byte vì chúng đã ở trong byte.
Các chuỗi được chuyển đổi thành byte như thế nào?
Python3
Chuỗi được chuyển đổi thành byte, sử dụng mã hóa. Có nhiều định dạng mã hóa khác nhau thông qua đó các chuỗi có thể được chuyển đổi thành byte. Ví dụ như ví dụ. ASCII, UTF-8, v.v ...
>>> b'A' == b'\x41' True 7>>> b'A' == b'\x41' True 8
Để chuyển đổi chuỗi thành chuỗi byte trong Python:
b'Hey I am a String'>>> b'A' == b'\x41' True 1>>> b'A' == b'\x41' True 2 >>> b'A' == b'\x41' True 3>>> b'A' == b'\x41' True 4>>> b'A' == b'\x41' True 5>>> b'A' == b'\x41' True 6byte type:
Python3
Chuỗi được chuyển đổi thành byte, sử dụng mã hóa. Có nhiều định dạng mã hóa khác nhau thông qua đó các chuỗi có thể được chuyển đổi thành byte. Ví dụ như ví dụ. ASCII, UTF-8, v.v ...
>>> b'A' == b'\x41' True 7>>> 'A' == b'A' False 6>>> 'A' == b'A' False 7>>> 'A' == b'A' False 8
Để chuyển đổi chuỗi thành chuỗi byte trong Python:
>>> b'A' == b'\x41' True 1>>> b'A' == b'\x41' True 2 >>> b'A' == b'\x41' True 3>>> b'A' == b'\x41' True 4>>> b'A' == b'\x41' True 5>>> b'A' == b'\x41' True 6
Python3
Đầu ra
>>> b'A' == b'\x41' True 7>>> b'A' == b'\x41' True 8
Để chuyển đổi chuỗi thành chuỗi byte trong Python:
Hey I am a Byte String>>> b'A' == b'\x41' True 1>>> b'A' == b'\x41' True 2 >>> b'A' == b'\x41' True 3>>> b'A' == b'\x41' True 4>>> b'A' == b'\x41' True 5>>> b'A' == b'\x41' True 6string type:
Python3
Đầu ra
>>> b'A' == b'\x41' True 7>>> 'A' == b'A' False 6>>> 'A' == b'A' False 7>>> 'A' == b'A' False 8