Định dạng byte trong Python là gì?

Có những lúc bạn bị nhầm lẫn giữa đối tượng byte và chuỗi. Nhưng có một số khác biệt giữa chúng. Hãy thảo luận về sự khác biệt giữa chúng

Chuỗi

Chuỗi là dãy các ký tự. Chúng là con người có thể đọc được. Chúng không thể được lưu trữ trực tiếp trên đĩa, bạn phải lưu chúng ở định dạng mà máy có thể đọc được là byte

  • str.encode[encoding='utf-8', errors='strict']

Mặc định cho các lỗi là 'nghiêm ngặt', nghĩa là các lỗi mã hóa sẽ gây ra lỗi UnicodeError

Có nhiều dạng mã hóa khác nhau như PNG, MP3, ASCII, UTF-8, v.v. được sử dụng để thể hiện hình ảnh, âm thanh, văn bản, v.v. tính bằng byte. Kỹ thuật mặc định là UTF-8. Hãy lấy một ví dụ để chuyển đổi một chuỗi thành byte

s = 'Hello world'

# Encoding the string into bytes
bytes_obj = s.encode['ASCII']
print[bytes_obj]

# Output:
b'Hello world'

Trong ví dụ trên, chúng tôi đã chuyển đổi chuỗi thành byte bằng cách sử dụng phương thức encode[]. Phương thức encode[] lấy kiểu mã hóa làm đối số. Ở đây, b đại diện cho chuỗi theo byte ở dạng ASCII. Phương thức encode[] trả về đối tượng bytes

đối tượng byte

Các đối tượng byte là các chuỗi byte bất biến, nghĩa là các số nguyên trong phạm vi từ 0 đến 255. Byte có thể được lưu trữ trực tiếp trên đĩa. Chúng có thể đọc được bằng máy, bạn phải chuyển chúng sang định dạng mà con người có thể đọc được, đó là một chuỗi. Muốn nó về nguyên dạng thì phải giải mã

  • bytes.decode[encoding='utf-8', errors='strict']

Hãy lấy một ví dụ để chuyển đổi byte thành chuỗi

# Byte Object
bytes_obj = b'Hello world'

# Decoding the bytes into string
s = bytes_obj.decode['ASCII']
print[s]

# Output:
'Hello world'

Trong ví dụ trên, chúng tôi đã chuyển đổi các byte thành chuỗi bằng phương thức decode[]. Phương thức decode[] lấy kiểu mã hóa làm đối số. Ở đây,

# Byte Object
bytes_obj = b'Hello world'

# Decoding the bytes into string
s = bytes_obj.decode['ASCII']
print[s]

# Output:
'Hello world'
1 đại diện cho chuỗi ở dạng ASCII. Phương thức decode[] trả về một chuỗi

Các đối tượng giống như byte có thể được sử dụng trong các hoạt động khác nhau và phải ở dạng nhị phân như truyền tệp, lập trình ổ cắm, v.v.

Phần kết luận

Trong bài viết này, bạn đã học được sự khác biệt giữa đối tượng byte và chuỗi trong Python. Chúng tôi cũng đã đề cập đến các phương pháp encode[]decode[]. Mã hóa và giải mã là các hoạt động nghịch đảo. Trước khi lưu trữ dữ liệu trên máy tính, trước tiên bạn phải mã hóa nó. Trước khi đọc dữ liệu từ máy tính, trước tiên bạn phải giải mã nó

Trong bài viết này, chúng ta sẽ xem cách chuyển đổi Byte thành Chuỗi trong Python. Đến cuối bài viết này, bạn sẽ có một ý tưởng rõ ràng về những loại này là gì và cách xử lý dữ liệu hiệu quả bằng cách sử dụng chúng

Tùy thuộc vào phiên bản Python bạn đang sử dụng, tác vụ này sẽ khác nhau. Mặc dù Python 2 đã hết tuổi thọ nhưng nhiều dự án vẫn sử dụng nó, vì vậy chúng tôi sẽ đưa vào cả hai cách tiếp cận Python 2 và Python 3

Chuyển đổi byte thành chuỗi trong Python 3

Kể từ Python 3, cách làm việc cũ của ASCII phải thay đổi và Python trở thành Unicode hoàn toàn

Điều này có nghĩa là chúng tôi đã mất loại unicode rõ ràng. u"string" - mỗi chuỗi là một u"string"

Để phân biệt các chuỗi này với các chuỗi phụ cũ tốt, chúng tôi đã giới thiệu một công cụ xác định mới cho chúng -

>>> codecs.decode[b]
"Let's grab a 🍕!"
1

Điều này đã được thêm vào trong Python 2. 6, nhưng nó không phục vụ mục đích thực sự nào ngoài việc chuẩn bị cho Python 3 vì tất cả các chuỗi đều là chuỗi phụ trong 2. 6

Chuỗi byte trong Python 3 được gọi chính thức là

>>> codecs.decode[b]
"Let's grab a 🍕!"
2, một chuỗi số nguyên bất biến trong phạm vi 0 >> codecs.decode[b] "Let's grab a 🍕!" 2 khác được thêm vào trong 2. 6 là
>>> codecs.decode[b]
"Let's grab a 🍕!"
4 - tương tự như
>>> codecs.decode[b]
"Let's grab a 🍕!"
2, nhưng có thể thay đổi

Chuyển đổi byte thành chuỗi bằng giải mã []

Hãy xem cách chúng ta có thể chuyển đổi byte thành Chuỗi, sử dụng phương thức

>>> codecs.decode[b]
"Let's grab a 🍕!"
6 tích hợp cho lớp
>>> codecs.decode[b]
"Let's grab a 🍕!"
2

Chuyển định dạng mã hóa, chúng tôi đã giải mã đối tượng

>>> codecs.decode[b]
"Let's grab a 🍕!"
2 thành một chuỗi và in nó

Chuyển đổi byte thành chuỗi bằng codec

Ngoài ra, chúng ta cũng có thể sử dụng mô-đun

>>> codecs.decode[b]
"Let's grab a 🍕!"
9 tích hợp cho mục đích này

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode[b, 'UTF-8']
"Let's grab a 🍕!"

Tuy nhiên, bạn không thực sự cần phải chuyển tham số mã hóa, bạn nên chuyển nó vào

>>> codecs.decode[b]
"Let's grab a 🍕!"

Chuyển đổi byte thành chuỗi bằng str[]

Cuối cùng, bạn có thể sử dụng hàm

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
0, hàm này chấp nhận nhiều giá trị khác nhau và chuyển đổi chúng thành chuỗi

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"

Tuy nhiên, hãy đảm bảo cung cấp đối số mã hóa cho

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
0, nếu không, bạn có thể nhận được một số kết quả không mong muốn

>>> str[b]
b'Lets grab a \xf0\x9f\x8d\x95!'

Điều này đưa chúng ta đến mã hóa một lần nữa. Nếu bạn chỉ định mã hóa sai, trường hợp tốt nhất là chương trình của bạn bị sập vì không thể giải mã dữ liệu. Ví dụ: nếu chúng tôi thử sử dụng hàm

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
0 với
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
3, chúng tôi sẽ nhận được kết quả

>>> str[b, 'UTF-16']
'敌❴\u2073牧扡愠\uf020趟↕'

Điều này thậm chí còn quan trọng hơn vì Python 3 thích sử dụng Unicode - vì vậy nếu bạn đang làm việc với các tệp hoặc nguồn dữ liệu sử dụng mã hóa tối nghĩa, hãy đảm bảo chú ý nhiều hơn

Chuyển đổi byte thành chuỗi trong Python 2

Trong Python 2, một gói byte và một chuỗi thực tế giống nhau - chuỗi là các đối tượng bao gồm các ký tự dài 1 byte, nghĩa là mỗi ký tự có thể lưu trữ 256 giá trị. Đó là lý do tại sao chúng đôi khi được gọi là bytestrings

Điều này thật tuyệt khi làm việc với dữ liệu byte - chúng tôi chỉ cần tải nó vào một biến và chúng tôi sẵn sàng in

>>> s = "Hello world!"

>>> s
'Hello world!'

>>> len[s]
12

Tuy nhiên, việc sử dụng các ký tự Unicode trong bytestrings sẽ thay đổi hành vi này một chút

Chuyển đổi byte thành Unicode [Python 2]

Ở đây, chúng ta sẽ phải sử dụng loại

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
4 của Python 2, loại này được giả định và sử dụng tự động trong Python 3. Điều này lưu trữ các chuỗi dưới dạng một loạt các điểm mã, thay vì byte

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
5 biểu thị byte dưới dạng số hex có hai chữ số vì Python không biết cách biểu thị chúng dưới dạng ký tự ASCII

>>> u = u"Let's grab a 🍕!"
u"Let's grab a \U0001f355!""

>>> u
"Let's grab a 🍕!"
# Yum.

>>> len[u]
15

Như bạn có thể thấy ở trên, chuỗi Unicode chứa

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
6 - một ký tự thoát Unicode mà thiết bị đầu cuối của chúng tôi hiện biết cách in ra dưới dạng một lát bánh pizza. Việc thiết lập điều này dễ dàng như sử dụng công cụ xác định
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
7 trước giá trị của chuỗi phụ

Vì vậy, làm thế nào để tôi chuyển đổi giữa hai?

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Bạn có thể lấy chuỗi Unicode bằng cách giải mã chuỗi ký tự của mình. Điều này có thể được thực hiện bằng cách xây dựng một đối tượng Unicode, cung cấp chuỗi phụ và một chuỗi chứa tên mã hóa làm đối số hoặc bằng cách gọi

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
8 trên một chuỗi phụ

Chuyển đổi byte thành chuỗi bằng cách sử dụng giải mã [] [Python 2]

Bạn cũng có thể sử dụng

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str[b, 'UTF-8']
"Let's grab a 🍕!"
9 từ mô-đun
>>> codecs.decode[b]
"Let's grab a 🍕!"
9

>>> s = "Let's grab a \xf0\x9f\x8d\x95!"
>>> u = unicode[s, 'UTF-8']

>>> u
"Let's grab a 🍕!"

>>> s.decode['UTF-8']
"Let's grab a 🍕!"

Chuyển đổi byte thành chuỗi bằng codec [Python 2]

Hoặc, sử dụng mô-đun

>>> codecs.decode[b]
"Let's grab a 🍕!"
9

import codecs

>>> codecs.decode[s, 'UTF-8']
"Let's grab a 🍕!"

Hãy chú ý đến mã hóa của bạn

Một lời cảnh báo ở đây - byte có thể được diễn giải khác nhau trong các bảng mã khác nhau. Với khoảng 80 mã hóa khác nhau có sẵn, có thể không dễ để biết liệu bạn đã chọn đúng mã hay chưa

Tin nhắn ban đầu là

>>> str[b]
b'Lets grab a \xf0\x9f\x8d\x95!'
2 hoặc
>>> str[b]
b'Lets grab a \xf0\x9f\x8d\x95!'
3 và cả hai đều có vẻ là chuyển đổi hợp lệ

Phần kết luận

Là lập trình viên, có một số điều chúng ta phải thường xuyên suy nghĩ và tích cực chuẩn bị để tránh những cạm bẫy. Điều này đặc biệt đúng ở các cấp độ thấp hơn, nơi chúng tôi hiếm khi sử dụng ngôn ngữ cấp cao như Python làm trình điều khiển hàng ngày.

Những thứ như bộ ký tự, mã hóa và nhị phân ở đó để nhắc nhở chúng ta rằng công việc của chúng ta là viết mã - mã hóa suy nghĩ của chúng ta thành các giải pháp khả thi. Rất may, rất nhiều suy nghĩ này trở thành một phần thói quen của chúng tôi sau một vài vòng trên bàn phím

Định dạng byte là gì?

Trong hầu hết các hệ thống máy tính, byte là đơn vị dữ liệu dài tám chữ số nhị phân . Một byte là đơn vị mà hầu hết các máy tính sử dụng để biểu thị một ký tự như chữ cái, số hoặc ký hiệu chính tả. Mỗi byte có thể chứa một chuỗi bit cần được sử dụng trong một đơn vị lớn hơn cho mục đích ứng dụng.

Đối tượng byte trong Python là gì?

Dữ liệu chuỗi và ký tự trong Python . Đối tượng bytes là một chuỗi bất biến gồm các giá trị byte đơn . Mỗi phần tử trong đối tượng bytes là một số nguyên nhỏ trong khoảng từ 0 đến 255.

Làm cách nào để đọc byte trong Python?

bạn có thể sử dụng bin[ord['b']] . replace['b', ''] bin[] nó cung cấp cho bạn biểu diễn nhị phân với 'b' sau bit cuối cùng, bạn phải xóa nó. Ngoài ra, ord[] cung cấp cho bạn số ASCII cho ký tự được mã hóa char hoặc 8-bit/1 Byte.

Chủ Đề