Chào mọi người, trong quá trình xử lý text, đọc và so sánh chuỗi thì mình gặp vấn đề như sau : có 2 string nhìn bằng mắt thường thì giống nhau, nhưng khi encode sang utf-8 thì nó cho ra 2 chuỗi binary khác nhau ,ví dụ trên python 3:
s1 = ‘Nguyễn Đình Bách’
s1.encode(‘utf-8′) = b’Nguy\xc3\xaa\xcc\x83n \xc4\x90i\xcc\x80nh Ba\xcc\x81ch’
s2 = ‘Nguyễn Đình Bách’
s2.encode(‘utf-8′) = b’Nguy\xe1\xbb\x85n \xc4\x90\xc3\xacnh B\xc3\xa1ch’
Nên s1 == s2 sẽ cho ra False. Vậy mình muốn hỏi với những string về mắt thường nhìn giống nhau nhưng encode khác nhau như trên thì có cách nào xử lý để phép so sánh s1_daxuly == s2_daxuly ra kết quả là True không.
Cám ơn mọi người đã đọc bài.
E cũng đoán vậy, đây là 2 đoạn text đọc từ 2 file Excel xuất ra trên 2 hệ thống khác nhau, để map thông tin từ file này sang file kia.
Của anh chạy bình thường:
Anh thử lại như này đi ạ :
s1 = b’Nguy\xc3\xaa\xcc\x83n \xc4\x90i\xcc\x80nh Ba\xcc\x81ch’.decode(‘utf8′)
s2 = b’Nguy\xe1\xbb\x85n \xc4\x90\xc3\xacnh B\xc3\xa1ch’.decode(‘utf8’)
print(s1)
print(s2)
s1 == s2
Bạn có thể dùng lib Unidecode để khử dấu tiếng Việt trước khi so sánh nhé:
Cám ơn bạn, nhưng cách này có nhược điểm là khi so sánh để map 2 danh sách thì dẫn đến những người tên Hùng sẽ trùng với những người tên Hưng chẳng hạn: unidecode.unidecode(‘Hùng’) == unidecode.unidecode(‘Hưng’)
E cũng đoán vậy, đây là 2 đoạn text đọc từ 2 file Excel xuất ra trên 2 hệ thống khác nhau, cần so sánh theo tên để map thông tin từ file này sang file kia ạ.
Hình như 2 xâu của em đang gõ bằng 2 bộ gõ khác nhau đúng không em? Anh đang thấy nó bị encode ra kết quả khác nhau