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’)
Bài liên quan
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.
Cảm ơn bạn mình đã hiểu