Xử lý str và unicode trong Python

Trong quá trình làm việc (xử lý text) em toàn bị lẫn giữa str và unicode.
Em cũng không hiểu, lúc get dữ liệu khi thì nó ra str, khi thì ra unicode. Không phân biệt được.
Chỉ đến khi nối str với unicode phát sinh lỗi thì mới đi kiểm tra lại và convert lại. Thành ra rất mệt.

Xin các bro kinh nghiệm xử lý vụ này để làm mọi thứ nó rõ ràng hơn được không ạ?

Đây là một trong những điểm yếu không chỉ Python mà của rất nhiều Interpreter/Scripting language khác.

  • Đọc docs xem coi cái đó return ra cái gì.
  • Dùng hàm kiểm tra
>>> s = 'abc'
>>> type(s) is str
True
>>> isinstance(s, str)
True
1 Like

Trong python 2 thì string là sequence of bytes, còn với unicode (nói chung không chỉ trong python) thì every character in a string is one or more bytes, một character có byte đầu tiên là 110***** tức là bắt đầu 1 ký tự mới. các byte sau sẽ là 10***** tức là tiếp tục biểu diễn character đó (xem tại đây). Muốn chuyển sang unicode thì dùng decode('utf-8') -> kết quả trả về kiểu unicode (nên làm với mọi string khi đang xử lý string trong chương trình để đảm bảo tính consistent và tránh error như bạn kể). Muốn chuyển từ unicode sang str thì dùng hàm encode('utf-8) (dùng trước khi lưu string vào database).

Còn trong python 3 thì kiểu str sẽ làm việc được với unicode luôn, không còn là sequence of bytes nữa.

2 Likes

Thanks bác rất nhiều ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?