Merhabalar,
mesela bir txt dosyasının hangi encodingle yazıldıgını python ile nasıl öğrenebilirim?
bunun bir yöntemi varmı?
Bir text dosyasinin hangi encoding’le yazildigini ogrenmek imkansiz. Bazi encoding’lerde yazilmadigini ogrenmek mumkun, bazilariyla da yazildigini tahmin etmek.
Mesela UTF-8 olarak decode edilebiliyorsa muhtemelen UTF-8’dir. Unicode BOM ile basliyorsa muhtemelen unicode’dur.
Text dosyasını açtığımız zaman sağ alt köşede yazıyor hangi encodingle yazıldığı, keşke bu veriyi çekmek mümkün olsa:(
O yazan şeyin doğru olduğunu nereden biliyorsunuz?
StackOverflow’da sorulmuş bu sanırsam.
Basit bir txt dosyasından bahsediyorum doğrudur heralde?
Tüm dosyalar basit değil mi zaten?
Aynı anda düzgün bir cevap yazmaya çalışıyorum bu arada, bu sorularım sadece sizi düşündürmek amaçlı. Dalga geçiyormuşum gibi düşünmeyin.
Text dosyasi acan bir programdan bahsediyorsun.
Benim bahsettigim gunumuz bilgisayarlarinda yaygin olarak kullanilan “dosyalar”. Ayni sekilde anlatirsam: "Belgelerim"e tikladiginda ikon ve isim olarak gozuken, kliklediginde bahsettigin programi acan seyler.
encodin = ['utf-8', 'windows-1250', 'windows-1252'] #vs.
for e in encodin:
try:
fh = open('lug.txt', 'r+', encoding= e)
fh.readlines()
fh.seek(0)
fh.close()
except UnicodeDecodeError:
print('%s ile hata alındı , farklı bir encoding deneyin' % e)
else:
print('dosyanın açıldığı encoding: %s ' % e)
böyle bir kod işe yararmı sizce?
Encoding (kodlama) dediğimiz şey bir veriye yüklediğimiz anlamı belirtiyor, Türkçe ve Norveççe* dilinin “bak” kelimesine farklı anlamlar yüklemesi gibi. Elinizde sadece “bak” yazan bir kağıt olsa bunun Norveçce mi yoksa Türkçe mi olduğunu nasıl anlardınız mesela? Belki bu yazıyı kimin yazdığını biliyorsunuzdur ve buna göre bir tahminde bulunabilirsiniz. Belki bu yazıyı yazan kişi kağıdın bir yerine herkesin anlayabileceği şekilde bunun hangi dilde yazıldığını not almıştır, buna bakarak da anlayabilirsiniz. Veya günlük hayatta hep Türkçe konuştuğunuz için bu kelimenin Türkçe dilindeki anlamı kastedilerek yazıldığını düşünüp diğer ihtimali düşünmezsiniz bile.
Mesela yeni bir text dosyası oluşturup not defteri uygulaması ile içine bir şeyler yazdığınızı düşünelim, dosyayı bir sonraki açışınızda uzantısından yola çıkarak not defteri uygulaması bu dosyayı daha önce kendisinin düzenlediğini tahmin edip dosyaları kaydederken kullandığı kodlamalardan birini seçebilir. Veya not defteri uygulaması Windows’un default kodlamasını kullanabilir. Veya bu uygulama dosyanın başına kodlaması hakkında bir bilgi yazıp daha sonra dosyayı buna göre de açabilir. Not defteri herhangi bir kodlama ile dosyayı başarılı bir şekilde açsa bile -sadece kullanılan kodlamanın bu dosya üzerinde çalışmasına dayanarak- bu kodlamanın doğru kodlama olduğunu bilemezsiniz.
Dosyalarınız çoğunun listedeki kodlamaları kullandığını düşünürsek işe yarayabilir, ama pratikte çoğunlukla doğru sonucu verse bile bu yöntemin hiçbir garantisi yok. @aib’in bahsettiği yönteme geliyor zaten:
“bak” kelimesinin İngilizce’de bir karşılığı olmadığına dayanarak bu kelimenin İngilizce yazılmadığını anlayabiliriz mesela, ama Türkçe mi yoksa Norveççe mi yazıldığını sadece tahmin edebiliriz.
Sorunun pratikte kullanılabilecek çözümleri için @Wyren’in verdiği linki inceleyebilirsiniz.