Mac OS’ten Linux’a yüklenen dosyalarda Türkçe karakter ve Encoding problemi

Serdar Cevher
2 min readJul 1, 2020

Geçenlerde WordPress sitelerimden birini daha Laravel tabanlı bir yapıya aktardım. Ancak bu seferki süreç biraz zorluydu; optimize edilmemiş hâlde bulunan fotoğrafları dinamik bir şekilde, Laravel Spatie MediaLibrary kütüphanesini de kullanarak yeniden oluşturdum (responsive sürümleriyle birlikte).

Her şey yolundaydı ancak tüm dosyaları sunucuya yükledikten bir süre sonra fark ettim ki, isminde büyük İ veya yumuşak g, ç, ü gibi harfler, kısacası Türkçe karakter barındıran dosyalar sunucudan yüklenemiyordu.

İlk başta sorunun sunucu kaynaklı olduğunu düşündüm ancak yanıldığımı anlamam uzun sürmedi.

Dosyalar bir şekilde Linux’takinden farklı encode edilmişti ama nasıl

Lafı uzatmayayım, nihayetinde Mac OS’in UTF-8 encoding’inin “NFD” tipinde olduğunu, ancak tüm Linux dağıtımları dahil olmak üzere diğer alanlarda UTF-8'in “NFC” tipinin kullanıldığını öğrendim. Doğrusunu söylemek gerekirse bu ikisi arasında ne fark olduğunu da hâlen bilmiyorum.

En nihayetinde, bir bash scripti yazarak sunucuda bulunan dosyalarımın hepsinin encoding’ini düzelttim ve her şey tekrar beklenildiği gibi çalışmaya başladı.

Çalıştırdığım script’in içeriği şu:

#!/bin/bash export DEFAULT_CHARSET=’UTF-8'
for file in `find dosyalarin_bulundugu_klasor -type f`; do

convmv -r -f utf8 -t utf8 — nfc — notest $file
done

Gerçekten saç baş yolduran bir problemi bir saatten kısa sürede çözmeyi başardığım için mutluyum ancak gelecekte de bu sorunla karşılaşacağımdan şüphem yok; o yüzden çözümü buraya not etmek ve hem gelecekteki kendimle, hem de sizlerle paylaşmak iyi bir fikir gibi gözüküyor.

--

--

Serdar Cevher

Developer of web & mobile apps | Co-founder: Auglinn, Off2Class | Founder: SmarDish, tarifmotoru.com, valizim.com | Ex columnist @PCnetDergisi