Merhaba Ben İngilizce gibi "ıöüç"
onları normalleştirmek isterken böyle u"ıöüç"
gibi özel karakterleri içeren bir yabancı kaynaktan metin tabanlı utf8 verilerini almak ->"iouc"
. Bunu başarmanın en iyi yolu ne olurdu? Ben Unidecode module kullanılması önerilirPython ve karakter normalleştirme
cevap
: Eğer bunu bir unicode dize beslemek ve bir bayt dize verir nasıl
>>> from unidecode import unidecode
>>> unidecode(u'ıöüç')
'iouc'
Not. Çıkış ASCII olarak garanti edilir.
Güzel bir +1 http://pypi.python.org/pypi/Unidecode/0.04.1 – soulseekah
import unicodedata
unicodedata.normalize()
Şaşkınım: print unicodedata.normalize ('NFKD', u "ıöüç") denedim ve çıktı tekrar: ıöüç – Hellnar
Diğer geçerli değerler 'NFC', 'NFKC', 'NFD' ve 'NFKD'. – soulseekah
Oldukça eminim ki bu, liderin aradığıdan farklı bir işlemdir. Ama evet, bu unicode normalizasyonu. Onun sorduğu şey genellikle böyle denmez. – drxzcl
Her şey sonucu çevirmek için ne kadar ilerlemek istediğinize bağlı olarak değişir. Her şeyi ASCII'ye (αβγ
- abg
) dönüştürmek istiyorsanız, o zaman unidecode
gitmek için bir yoldur.
sadece aksanlı harfleri Aksan kaldırmak istiyorsanız, o zaman ait olan (normalleştirme formu NFKD (bu U+0301 COMBINING ACUTE ACCENT
ardından düz bir mektupta a
için vurgulu harf á
dönüştürür) kullanarak dize çürüyen ve sonra aksan atarak deneyebilirsiniz Unicode character classMn
- "İşaretleme, nonspacing").
import unicodedata
def remove_nonspacing_marks(s):
"Decompose the unicode string s and remove non-spacing marks."
return ''.join(c for c in unicodedata.normalize('NFKD', s)
if unicodedata.category(c) != 'Mn')
basit yolu buldum:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
Arama ve belki değiştirmezseniz, gerçi normal bir karaktere özel tam dizisine sahip olmak gerekir. – soulseekah