Bu yazımızda karakter kodlaması sorunlara çözüm bulabilmek için karakter kodlamasını (charset) nasıl değiştirebileceğinizi anlatıyoruz.
Karakter kodlaması nedir, yazıtiplerinden ne gibi farkları var?
Öncelikle yazıtipi ve karakter kodlaması ayrı şeyler, karakter kodlamasını değiştirdiğinizde yine aynı yazı tipini kullanabilirsiniz. Karakter kodlaması; harflerin, sembollerin sisteme ‘kod’lanış biçimidir ve donanımı da ilgilendiren yazılımsal bir şeydir (kod alanı, bit örüntüleri, oktetler, doğal sayılar, elektrik sinyalleri vb.) Şu girdi bu karaktere denk geliyor gibi bir anlama sahip.
Bir belgenin okunuşunu neden etkiliyor?
Artık pek böyle sorunlarla karşılaşmasak da yine de altyazı dosyalarında karşılaşmışızdır. Her karakter kodlaması her karakteri desteklemiyor. Sizin belgenizde bulunan karakterlere uygun olan karakter kodlaması seçilmemişse o karakterleri (misal Türkçe karakterler) bozuk gösterir.
Karakter kodlamasını değiştirelim
Bu işlem için metin düzenleyicisini de kullanabiliriz uçbirimi de.
Karakter kodlamalarını etkinleştirme
Bunun için kök dizinde şu yolda bulunan (en üst dizin) etc >> locale.gen dosyasını yönetici haklarıyla başlatmamız gerekmekte. Aksi taktirde belgeyi açsanız dahi belgede değişiklik yapmanıza izin vermeyecektir. Bu yüzden uçbirimi kullanıyoruz.
Not: Koddaki mousepad metin düzenleyicidir, başka bir araç da kullanabilirsiniz, mesela Gnome’de gedit.
sudo mousepad /etc/locale.gen
Bu komutun ardından açılan pencerede istediğimiz karakter kodlamalarını etkinleştirebiliriz. Etkinleştirmek için başındaki ‘#’ işaretini sağındaki boşluk ile beraber kaldıracağız. Yukarıdaki bahsettiğimiz sorunlar için ya hangilerini?
- Altyazıdaki sorunlar için tr_TR ISO-8859-9 kodlamasını bularak başındaki işareti kaldıralım. Alt yazıdaki sorunu çözebilmek için bu kodlamayı etkinleştirdikten sonra altyazı dosyanızı da bu karakter kodlaması ile kaydetmeniz gerekiyor.
- Steam’de aşağıdaki hatayı almamak için en_US.UTF-8 kodlamasını etkinleştirebilirsiniz. Birazdan yazacağımız kod ile veritabanını da güncelledikten sonra bu sorununuz için başka bir işlem yapmanıza gerek kalmıyor.
Başlarındaki # (hashtag) işaretini sildikten sonra, dosyayı kaydedelim ve sonra yaptığımız değişikliklerin sistemde uygulanabilmesi için veritabanını güncelleyelim:
sudo locale-gen
Metin düzenleyiciler üzerinden bir belgenin kodlamasını değiştirme
Dosyamızı farklı kaydedelim:
Ardından Kodlama: yazan yerden istediğimiz kodlamayı seçelim:
Tüm kodlamaları göster seçeneğinden sonra açılacak yerden istediğiniz karakter kodlamasını seçip yeni karakter kodlamasına sahip belgenizi oluşturabilirsiniz.
iconv komutu ile uçbirim üzerinden bir belgenin kodlamasını değiştirme
Öncelikle değiştirmek istediğimiz belgenin karakter kodlamasını öğrenelim:
file -bi dosyaismi
Karakter kodlamasını değiştirmek için bu komut şablonunu kullanabiliriz:
iconv -f <dosyanın orijinal karakter kodlaması> -t <olmasını istediğimiz yeni karakter kodlaması> <değiştirmek istediğimiz dosya> -o <değişmiş hâlinin ismi>
Bir örneği biz yapalım; mesela UTF-8 kodlu bir altyazı dosyamız var (illaki utf8 ile kodlu olmak zorunda değil, yukarıdaki komut ile hangi karakter kodlamasına sahip olduğunu öğrenebilirsiniz) ve film izlerken Türkçe karakterlerinde sorun yaşıyoruz, düzelmesi için de ISO 8859-9 karakter kodlamasına bürünmesini istiyoruz, o zaman:
iconv -f utf-8 -t iso-8859-9 altyazi.srt -o degistirilmisaltyazi.srt
Bu şekilde kullanabiliriz.
Bir not da düşelim: Burada değiştirmek istediğimiz dosya korunur. Onun yerine yeni bir dosya oluşur ve değişiklikler ona kaydedilir. Eğer aynı dosyayı değiştirmek istiyorsanız -o parametresinden sonra aynı dosya ismini yazabilirsiniz. Bu sayede yeni oluşturacağı dosya kendisi olacağı için eski hâlinin yerine geçecektir.
Kendinize iyi bakın, hoş kalın…
Açılış Görseli: Building a UTF-8 encoder in Perl (CC by-nc 3.0)