Dün gece, basit bir dosya işleme Python scripti yazıyordum. Script, os.system() kullanarak bir dizindeki dosyaları listeleyecekti. Kendi bilgisayarımda "C:\Users\Bingul" ile çalıştı, mükemmel. Patronun makinesinde test etmek için gönderdim. Script çalıştı, bir şeyler döndü ama sonra aniden patladı! Hata mesajı bile tam anlamadığım bir encoding karmaşasıydı. Meğerse patronun Windows kullanıcı adı "C:\Users\İbrahim" miş. O küçücük noktalı İ, tüm ekosistemi altüst etmiş.
os.system(), komutu Windows'un cmd.exe'sine paslıyor. İşte bela da burada başlıyor. cmd.exe'nin varsayılan kod sayfası (CP850 veya benzeri) ile Python scriptinin çalıştığı ortamın karakter kodlaması (genelde UTF-8) Türkçe karakterler konusunda asla anlaşamıyor. "İbrahim" dizin yoluna çevrilirken, cmd onu tanımlayamadığı bir karaktere dönüştürüyor ve komut çalıştırılamıyor.
Kısacası, şöyle bir şey patlıyordu:
Python:
os.system("dir C:\Users\İbrahim\Documents") # Felaket!
StackOverflow'da bile direkt çözüm bulamadım, biraz kazmam gerekti. İşte denenmiş birkaç yöntem:
1. Yol 1: `subprocess.run()` ile Güvenli Geçiş
os.system yerine subprocess modülünü kullanmak ve argümanları düzgün bir liste olarak vermek çok daha güvenli. Ayrıca shell=True'dan kaçınmak lazım.
Python:
import subprocess
subprocess.run(["dir", r"C:\Users\İbrahim\Documents"], shell=True) # shell=True hala riskli ama...
# Daha iyisi: Shell komutlarından mümkün olduğunca kaçınmak.
2. Yol 2: Yolu `UTF-8`'den `cp1254`'e Çevirmek (Windows Türkçe için)
Bu biraz daha low-level ve işletim sistemine bağımlı bir çözüm. Yolu, Windows'un anlayacağı yerel kodlamaya çeviriyorsun.
Python:
path = "C:\\Users\\İbrahim\\Documents"
encoded_path = path.encode('cp1254', errors='ignore').decode('cp1254')
os.system(f"dir {encoded_path}")
3. Yol 3 (En Temizi): Yollarda Türkçe Karakter Kullanmamak
Acı ama gerçek. Profesyonel ortamlarda, özellikle sunucu ve CI/CD ortamlarında, kullanıcı dizini ve proje yollarında sadece ASCII karakter kullanmak en büyük hayat kurtarıcı. "ibrahim" yaz, kafan rahat etsin.
Yıllardır yazılımla uğraşıyorum, böyle "kullanıcı adı" gibi basit bir şeyin tüm scripti çökertmesi gerçekten sinir bozucu. Bu, Unicode ve karakter kodlamalarının önemini bir kez daha hatırlattı. "Ben sadece İngilizce karakter kullanırım" diyen herkese selam olsun!
Siz de benzer bir encoding kabusu yaşadınız mı? Windows'ta Türkçe karakter sorununu aşmak için sizin kesin çözümünüz nedir? Yorumlara yazın, birlikte isyan edelim!