Dün gece, müşteriden gelen devasa bir CSV dosyasını veritabanına aktarmak için sıradan bir Python botu yazıyordum. Her şey yolunda gidiyor gibiydi, ta ki verileri kontrol edene kadar. "İstanbul" yazan yer "?stanbul", "Şirket" yazan yer "?irket" olmuştu. Kafayı yiyecektim! Tüm Türkçe karakterler, o lanet olası soru işaretlerine dönüşmüştü.
Hemen pandas ile okuduğum dosyayı ve bağlantıyı didik didik etmeye başladım. İlk şüphelim, tabii ki UTF-8'di. Ama kodumda zaten `encoding='utf-8'` yazıyordu. StackOverflow'da bile benzer onlarca soru var ama bana özel çözüm yoktu. Sonra aklıma geldi, ya dosya Windows-1254 (cp1254) ile kaydedilmişse? Hemen denedim:
Python:
df = pd.read_csv('veriler.csv', encoding='cp1254')
Ve işte! Terminalde ilk defa düzgün "Çanakkale" yazısını görünce içimden bir "Evet be!" çığlığı attım. Meğerse müşteri Excel'de kaydedip gönderdiği için dosya cp1254 formatındaymış. Botum ise saf gibi utf-8 bekliyormuş.
Bu saçmalıktan sonra öğrendiğim şey şu: Türkçe karakter içeren herhangi bir dosya ile çalışırken, encoding parametresini asla varsayılan bırakma! Hatta dosyayı açmadan önce küçük bir fonksiyonla encoding tespiti yapmak çok daha sağlıklı. Ya da müşteriye "Ağabey, lütfen UTF-8 olarak kaydet
Siz de benzer bir encoding faciası yaşadınız mı? Ya da CSV okurken encoding tespitini otomatik ve güvenli yapmanın daha temiz bir yolu var mı? Yorumlara yazın, birlikte ağlayalım.