Bir meslektaşımla çalışırken kodlamayla ilgili görünen garip bir sorun buldum. Biz gibi basit yeterince dosya adlarına sahip bazı görüntülerle çalışıyoruz city.gif
ya wine.gif
, ama bir tahmin edebileceğiniz gibi gibi özel karakterleri kullanırken şeyler daha karmaşık hale geldiğini é
, ë
, à
. Ayrıca bu karakterlere sahip Hollandaca verilerle de çalışıyoruz, örn. café
( Pub ). (Dosyaların kökeni üzerinde kontrolümüz yoktur.) Sorunlar burada ortaya çıkmaya başlar. Aşağıdaki dosya adları sadece bir örnektir. Sorun, aksanları olan diğer karakterler için de oluşur.
café-2.png
cafetaria.png
café.png
İlk ve son öğenin içinde aksanlı bir e olmalıdır (aksan aigu, é
). Linux'ta (CentOS 6 ve 7) bir terminalde çalışırken bu şekilde gösterilir ls
. Ama işte Windows geliyor! (Windows 10, 64 bit kullanarak.) Sunucumuzla SSL üzerinden Windows'a bağlandıktan sonra çağrı yaparak ls
yukarıdaki liste şöyle görünür:
café-2.png
cafetaria.png
caf▒.png
Umarım görebileceğiniz gibi, ilk satır hala aksanlı e'ye sahiptir é
, ancak üçüncüsü yoktur. Bunun yerine, unicode (9618 ondalık) ▒
olan bu karakteri görüyorum medium shade
. Bu kendi içinde garip. Ancak, SFTP üzerinden Filezilla ile bağlandığımda (hala Windows'ta) bunu görüyorum:
café-2.png
cafetaria.png
café.png
Şimdi işler tersine döndü: birincisinde é
, diziye dönüştü ve üçüncüsünde her şey yolunda. Buldum burada <-> doğru tahmin ediyorum eğer yanlış gitti UTF-8 dönüşüm bunun nedeni bir Latin-1 olasılığı en yüksek olduğu. Ama olan tek şey bu olamaz, değil mi?
Linux her şeyi beklediğimiz gibi gösterir, Windows dosya adını (SSH (macun) veya SFTP (dosyazilla)) görüntüleme şeklimize bağlı olarak görünüşte tutarsız davranış gösterir. Bu dosya adlarını 'normalleştirmek' - yani düzenlemek - ve her işletim sisteminde aynı olduklarından emin olmak için bir yol var mı; ya da en azından tutarlı ve eğer öyleyse, nasıl? UTF-8
bizim kodlama seçimimizdir.
Bu sadece estetik bir mesele olsa da, öyle değil. Linux sunucumuzdan Windows'ta SFTP aracılığıyla bir şey indirmeye çalışırken, yukarıda belirtilen sorunu içeren dosyaları indiremiyorum. Filezilla gibi bir hata atar Can't download file café-2.png: café-2.png does not exist on the server
. Bana öyle geliyor ki Filezilla dizini ve dosya adını okuyor, bazı kodlamalarda yorumluyor, yorumuyla sunucuya bir GET isteği gönderiyor, ancak bu yorum Linux dosya adından farklı olduğu için dosya bulunamadı.
Sonuç olarak, bunun neden olduğu ile ilgilenmeme rağmen, mevcut bir çözüm varsa iyi olurdu . Görüntü dosyaları muhtemelen farklı İşletim Sistemlerinde oluşturulduğu için mi meydana geliyor? Linux sunucusu bunları yanlış yorumladığı için mi yoksa Windows karışıyor mu? Umarım sadece sysadmin'imizle iletişime geçip sunucu yapılandırmasında bir anahtarı açmasını isteyebileceğimiz bir çözüm var, ancak korkarım ki bu kadar kolay değil.
python -c "import sys; print(repr(sys.argv[1]))" café-2.png
ve python -c "import sys; print(repr(sys.argv[1]))" café.png
?