01/10/2018, 09:46

Hỏi về hàm decode và encode trong python

Mọi người cho mình hỏi hai hàm decode và encode đề làm gì và khi nào sử dụng nó.
Mình sử dụng library re để lấy dữ liệu trên web thì bị lỗi như sau:
import urllib.request
response = urllib.request.urlopen(“http://python.org/”)
htmt = response.read()
token = re.split("W+",htmt)
TypeError: cannot use a string pattern on a bytes-like object
Nhưng sau khi dùng hàm decode thì không bị lỗi nữa. Bạn nào giải thích dùm mình với.
htmt = htmt.decode(‘utf-8’)

Vô Thin viết 11:52 ngày 01/10/2018

htmt = response.read() <= kiểu dữ liệu của htmt là kiểu gì?
Nếu nó không phải string, mà bạn token = re.split("\W+",htmt) thì nó sinh ra lỗi:
TypeError: cannot use a string pattern on a bytes-like object
Do đó, bạn phải:
thay vì htmt = response.read()
bạn viết: htmt = response.read().decode(‘utf-8’) sẽ ổn, không bị báo lỗi trên nữa.
Túm lại là server trả về bytes object và có nhiều dạng encoding khác nhau chứ không phải luôn luôn là utf-8, do đó, hàm encode và decode là để nhận về đúng (nghĩa là các byte được chuyển về character phù hợp với encoding). Nếu không bạn sẽ xử lý sai, tiếng Việt chẳng hạn ra thành mì gói bẻ vụn.

Conan Nhoc viết 11:53 ngày 01/10/2018

Cảm ơn bạn mình đã hiểu

Bài liên quan
0