Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Sự khác biệt giữa byte objects và string trong Python
Trong Python, byte objects (đối tượng byte) và string (chuỗi ký tự) là hai kiểu dữ liệu cơ bản nhưng có những khác biệt quan trọng trong cách sử dụng và mục đích của chúng. Dù cả hai đều có thể biểu diễn dữ liệu văn bản, byte objects chủ yếu được máy tính xử lý và lưu trữ, trong khi strings dễ đọc và thân thiện với người dùng hơn. Sự khác biệt giữa hai kiểu này có thể gây nhầm lẫn, đặc biệt khi làm việc với các tác vụ liên quan đến mã hóa và giải mã dữ liệu. Hãy cùng tìm hiểu cách thức hoạt động và các ứng dụng của chúng trong Python.
String trong Python
String là chuỗi các ký tự, dễ đọc đối với con người. Tuy nhiên, chúng không thể lưu trữ trực tiếp trên đĩa mà cần được mã hóa thành định dạng máy có thể đọc được, gọi là bytes (dữ liệu nhị phân).Cú pháp mã hóa chuỗi thành bytes:
str.encode(encoding='utf-8', errors='strict')
Trong đó, tham số errors
mặc định là 'strict'
, nghĩa là nếu có lỗi mã hóa, Python sẽ báo lỗi UnicodeError
. Có nhiều dạng mã hóa khác nhau như PNG, MP3, ASCII, UTF-8, ... dùng để biểu diễn các dạng dữ liệu như hình ảnh, âm thanh, văn bản dưới dạng bytes. Phương pháp mã hóa mặc định thường là UTF-8. Ví dụ:
s = 'Hello world' # Mã hóa chuỗi thành bytes bytes_obj = s.encode('ASCII') print(bytes_obj) # Output: b'Hello world'
Trong ví dụ trên, chuỗi được chuyển đổi thành dạng bytes bằng phương thức encode()
, với ASCII là kiểu mã hóa. Ký tự b
đứng trước chuỗi cho biết chuỗi đang ở dạng bytes. Phương thức encode()
trả về một đối tượng bytes.
Bài viết này được đăng tại [free tuts .net]
Byte Objects trong Python
Byte objects là chuỗi dữ liệu bất biến chứa các giá trị từ 0 đến 255, có thể lưu trữ trực tiếp trên đĩa và dễ xử lý với máy tính. Để chuyển byte về dạng chuỗi để dễ đọc, bạn cần giải mã nó.
Cú pháp giải mã byte về string:
bytes.decode(encoding='utf-8', errors='strict')
Ví dụ giải mã byte về chuỗi:
# Đối tượng byte bytes_obj = b'Hello world' # Giải mã byte về chuỗi s = bytes_obj.decode('ASCII') print(s) # Output: 'Hello world'
Trong ví dụ trên, chúng ta sử dụng phương thức decode()
để chuyển byte về dạng chuỗi, với kiểu mã hóa ASCII. Kết quả trả về là một chuỗi.
Byte-like objects rất hữu ích trong các tình huống yêu cầu dữ liệu ở dạng nhị phân như truyền tải file hoặc lập trình socket.
Kết bài
Trong bài viết này, mình đã tìm hiểu sự khác biệt giữa byte objects và string trong Python, cũng như cách sử dụng các phương thức encode()
và decode()
. Mã hóa (encoding) và giải mã (decoding) là các thao tác ngược nhau: trước khi lưu dữ liệu lên máy, bạn cần mã hóa nó; và khi đọc dữ liệu từ máy, bạn cần giải mã về dạng dễ đọc.