ฉันเพิ่งพบคำตอบนี้บนเว็บ:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
มันใช้งานได้ดี (ตัวอย่างเช่นภาษาฝรั่งเศส) แต่ฉันคิดว่าขั้นตอนที่สอง (การลบเครื่องหมายเน้นเสียง) สามารถจัดการได้ดีกว่าการวางอักขระที่ไม่ใช่ ASCII เนื่องจากการทำเช่นนี้จะล้มเหลวสำหรับบางภาษา (กรีกเป็นต้น) ทางออกที่ดีที่สุดอาจจะเป็นการลบอักขระยูนิโค้ดที่ติดแท็กอย่างชัดเจน
แก้ไข : นี่เป็นการหลอกลวง:
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)
จะกลับมาจริงถ้าตัวละครc
สามารถรวมกับตัวละครก่อนหน้านั่นคือถ้ามันเป็นนักแสดง
แก้ไข 2 : remove_accents
คาดหวังสตริงunicodeไม่ใช่สตริงไบต์ หากคุณมีสตริงไบต์คุณต้องถอดรหัสสตริงเป็นยูนิโค้ดดังนี้:
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)