Tôi chỉ tìm thấy câu trả lời này trên Web:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
Nó hoạt động tốt (đối với người Pháp, ví dụ), nhưng tôi nghĩ rằng bước thứ hai (loại bỏ các điểm nhấn) có thể được xử lý tốt hơn so với thả phi Ký tự -ASCII, vì điều này sẽ không thành công đối với một số ngôn ngữ (ví dụ: tiếng Hy Lạp). Giải pháp tốt nhất có thể là xóa một cách rõ ràng các ký tự unicode được gắn thẻ là dấu phụ.
Sửa: đây hiện các trick:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
unicodedata.combining(c)
sẽ trả về true nếu nhân vật c
có thể được kết hợp với các nhân vật trên, đó là chủ yếu nếu đó là một dấu phụ.
Chỉnh sửa 2: remove_accents
hy vọng một unicode chuỗi, không phải là một chuỗi byte. Nếu bạn có một chuỗi byte, sau đó bạn phải giải mã nó thành một chuỗi unicode như thế này:
encoding = "utf-8" # or iso-8859-15, or cp1252, or whatever encoding you use
byte_string = b"café" # or simply "café" before python 3.
unicode_string = byte_string.decode(encoding)
Vâng, đây là giải pháp tốt hơn chỉ đơn giản là tước dấu. Nó cung cấp nhiều phiên âm hữu ích hơn cho các ngôn ngữ có quy ước để viết các từ trong ASCII. –
Dường như làm việc tốt với người Trung Quốc, nhưng việc chuyển đổi tên tiếng Pháp "François" không may cho "FranASSois", mà không phải là rất tốt, so với "Francois" tự nhiên hơn. – EOL
tùy thuộc vào những gì bạn đang cố gắng đạt được. ví dụ tôi đang thực hiện tìm kiếm ngay bây giờ và tôi không muốn chuyển ngữ tiếng Hy Lạp/tiếng Nga/tiếng Trung, tôi chỉ muốn thay thế "ą/ę/ś/ć" bằng "a/e/s/c" – kolinko