Python ve pandas’ta Türkçe karakter sorununu giderin

pandas ş yerine ÅŸ okuyor, UnicodeDecodeError ile duruyor ya da dışa aktardığınız CSV Excel’de bozuk mu görünüyor? Python’da encoding parametresi doğruyla yanlış arasındaki farktır. İşte tipik durumlar – bozuk dosyaları yukarıda tarayıcınızda onarabilirsiniz.

Metinle ve şu dosyalarla çalışır:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Örneğin Excel dışa aktarımları, veritabanı yedekleri, altyazılar veya web sitesi kodu.

Düzelt

  1. Bir dosya bırakın veya metni yapıştırın
  2. Düzeltme otomatik yapılır
  3. Kopyalayın veya indirin
ya da bir dosyayı buraya sürükleyin
  • Dosya yükleme yok. Dosyalarınız doğrudan tarayıcınızda düzeltilir ve cihazınızdan asla çıkmaz.

  • AB’de sunucular. Mojibuster, Finlandiya’daki (AB) bir sunucuda çalışır; Genel Veri Koruma Tüzüğü (GDPR) geçerlidir. GDPR metni (EUR-Lex)

Okurken UnicodeDecodeError

pd.read_csv UTF-8 bekler. Dosya Windows-1254 (Türkçe ANSI) ile kaydedildiyse pandas UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfd in position 12: invalid start byte hatasıyla durur – 0xFD Windows-1254’te ı harfidir. O zaman kodlamayı belirtin:

  • Excel ve Türkçe Windows’tan gelen dosyalar için pd.read_csv('veri.csv', encoding='cp1254').
  • encoding='latin-1' hata vermez ama ı, ş, ğ gibi harfleri yanlış okur – Türkçede cp1254 doğru seçimdir.
  • Kodlamayı bilmiyorsanız dosyayı Mojibuster’a bırakın: kodlamayı bulur ve dosyayı UTF-8 kaydeder.

DataFrame’de ş yerine ÅŸ

DataFrame ÅŸ ve ı gösteriyorsa UTF-8 dosya latin-1 ya da cp1252 olarak okunmuştur – veya veri daha önce bozulmuştur. İlk durumda encoding='utf-8' yeter. Verinin kendisi bozuksa tek tek değerler için deger.encode('cp1252').decode('utf-8') işe yarar. Karışık verilerde ise bir hücre zaten doğruysa başarısız olur. Daha kolayı: dosyayı Mojibuster ile onarın, sonra okuyun.

BOM’suz Excel’de açılan, pandas’tan çıkan bir CSV

Önce

ad,sehir,ciro
Şule Çelik,İstanbul,1250 ₺
Oğuz Işık,Eskişehir,980 ₺

Sonra

ad,sehir,ciro
Şule Çelik,İstanbul,1250 ₺
Oğuz Işık,Eskişehir,980 ₺

to_csv: Excel dosyayı yanlış gösteriyor

df.to_csv('cikti.csv') BOM’suz UTF-8 yazar. Excel böyle dosyaları ANSI olarak açar ve Türkçe harfler ÅŸ gibi bozulur. encoding='utf-8-sig' ile pandas BOM yazar ve Excel UTF-8’i tanır. Ayrıntı için Excel’de Türkçe karakter sorunu.

Windows’ta open()

encoding vermeden open('dosya.txt') Windows’ta sistem kodlamasını kullanır, Türkçe kurulumda bu cp1254’tür. Linux’ta çalışan bir betik Windows’ta aynı UTF-8 dosyayı ÅŸ olarak okur. Bu yüzden her zaman encoding='utf-8' verin ya da PYTHONUTF8=1 ortam değişkenini ayarlayın. PEP 686 ile ilerideki Python sürümlerinde UTF-8 zaten varsayılan olacak.

requests ile web verisi

requests, response.text değerini Content-Type başlığından türetir. Metin yanıtı orada karakter seti belirtmezse ISO-8859-1 varsayar ve UTF-8 sayfalar ÅŸ gösterir. Önce response.encoding = 'utf-8' atayın ya da UTF-8’i kendisi bulan response.json() kullanın.

Metin errors='replace' ile gerekli karakterleri içermeyen bir kodlamaya yazıldıysa dosyada ? vardır – bilgi kaybolmuştur, bkz. Türkçe harfler yerine soru işareti.

Sık sorulan sorular

Bunun için bir Python kütüphanesi var mı?

Evet, ftfy mojibake’yi Python kodunda düzeltir. Programlama yapmadan tek dosya için Mojibuster daha hızlıdır ve kaydetmeden önce her değişikliği gösterir.

En çok hangi encoding değerleri gerekir?

utf-8, utf-8-sig (BOM’lu UTF-8), cp1254 (Windows, Türkçe), iso-8859-9, latin-1 ve utf-16. Büyük/küçük harf ve tire fark etmez.

Ayraçlar ve sayılar korunuyor mu?

Evet. Mojibuster yalnızca bozuk karakterleri değiştirir. Virgüller, tırnaklar ve satır sonları aynen kalır.

Diğer rehberler