Bloga dön

Altyazı Türkçe Karakter Sorunu: Kodlamayı Düzeltme

Altyazı Türkçe karakter sorunu kodlamadan çıkar: ÅŸu, þ, � ya da ??? görüyorsan kod sayfasını bul, Not Defteri, TextEdit veya FFmpeg ile UTF-8'e çevir.

3 Kasım 2026
Sablate Team

Altyazıda bozuk karakterler, oynatıcı dosyayı yanlış karakter kodlamasıyla okuduğunda çıkar. şu yerine ÅŸu ya da þu, elmas işaretleri, soru işaretleri: her desen belirli bir nedene işaret eder. Çözüm neredeyse her zaman aynı: dosyayı UTF-8'e çevir ya da oynatıcıya dosyanın hangi eski kod sayfasını kullandığını söyle.

Aşağıda: bozuk metin nasıl okunur, dosyan büyük ihtimalle hangi kod sayfasında, Windows'ta ve Mac'te düzeltmenin üç yolu, kutuların neden başka bir sorun olduğu ve bunun bir daha yaşanmaması için ne yapmalı.

Altyazıda neden bozuk karakterler çıkar?

.srt dosyası düz metindir ve düz metin hangi kodlamayla kaydedildiğini söylemez. Oynatıcı tahmin etmek zorunda kalır. Önce her yazıyı barındıran UTF-8'i dener; baytlar geçerli UTF-8 değilse bir varsayılana döner, bu da genellikle çalıştığı bilgisayarın eski Windows kod sayfasıdır.

Sorunun kökü bu eski kod sayfalarıdır. UTF-8 norm olmadan önce Windows metni bölge başına bir kod sayfasıyla saklıyordu: Batı Avrupa için Windows-1252, Türkçe için 1254, Kiril için 1251, Korece için 949, Japonca için 932. Her biri aynı bayt değerlerini farklı harfler için yeniden kullanır. Türkçe bir dosyada ş anlamına gelen bayt, Batı Avrupa kod sayfasında þ anlamına gelir.

Microsoft'un kendi kod sayfası referansı sorunu açıkça söylüyor: bu kod sayfaları “farklı bilgisayarlarda farklı olabilir ya da tek bir bilgisayar için değiştirilebilir; bu da veri bozulmasına yol açar” ve bunun yerine UTF-8'i öneriyor. Yıllar önce Türkçe ya da Korece bir bilgisayarda hazırlanıp bugün İngilizce bir dizüstünde oynatılan altyazı tam olarak bu durum.

Metnin kendisi çoğunlukla hâlâ dosyanın içindedir. Yanlış olan yalnızca okuma; bu yüzden dosyanın gerçek kod sayfasını bildiğin anda düzeltme hızlıdır.

Bozuk metin sana ne söylüyor?

Her belirtinin kendi nedeni var. Bu örnekler, gerçekten kodlayıp yanlış şekilde açtığımız dosyalardan geliyor:

Ne görüyorsunNe olduÇözüm
Déjà vu, ç, ö (bir harf için iki sembol)UTF-8 bir dosya Windows-1252 olarak okunduOynatıcıyı UTF-8'e ayarla ya da dosyayı UTF-8 with BOM olarak kaydet
Þu iþi çýðlýk, Ïðèâåò, Za¿ó³æ (yanlış harfler)Türkçe, Rusça ya da Lehçe kod sayfasındaki bir dosya Batı Avrupa olarak okunduGerçek kod sayfasından UTF-8'e çevir
� elmas işaretleri ya da �ȳ��ϼ���Eski bir kod sayfasındaki dosya UTF-8 olarak okunduGerçek kod sayfasından UTF-8'e çevir
Harflerin olması gereken yerde ???Metin, harfleri olmayan bir kod sayfasıyla kaydedilirken harfler silindiOrijinal dosyayı yeniden al; hiçbir dönüştürme onları geri getirmez
Boş kutular, geri kalan her şey doğruFontta o yazı için glif yok; metin sağlamFontu değiştir

İlk iki satır yaygın olanlar ve birbirinin tersi. İlkinde dosya zaten doğru, hatalı olan oynatıcı. İkinci ve üçüncüde dosya eski bir kod sayfasında, bu yüzden o kod sayfasını tahmin etmeyen her oynatıcıda bozuluyor. Dosyayı bir kez UTF-8'e çevirmek tüm oynatıcıları aynı anda düzeltir.

Altyazı dosyan hangi kod sayfasında?

Altyazının dili bunu söyler. UTF-8 olmayan bir dosya, neredeyse her zaman o dilin eski Windows kod sayfasındadır:

Altyazı diliEski Windows kod sayfasıFFmpeg için ad
İngilizce, Fransızca, Almanca, İspanyolca, Portekizce, İtalyanca1252CP1252
Lehçe, Çekçe, Macarca1250CP1250
Rusça, Ukraynaca, Bulgarca1251CP1251
Yunanca1253CP1253
Türkçe1254CP1254
Arapça1256CP1256
Japonca932 (Shift-JIS)CP932
Korece949CP949
Çince, Basitleştirilmiş936 (GB2312)GB18030
Çince, Geleneksel950 (Big5)CP950

GB18030, Basitleştirilmiş Çince kod sayfasının üst kümesidir; bu yüzden GBK ya da GB2312 olarak kaydedilmiş dosyaları da okur.

Elindekini kontrol etmek için dosyayı Windows Not Defteri'nde aç: durum çubuğu kodlamanın adını gösterir ve “ANSI” eski bir kod sayfası demektir. Mac'te ya da Windows'ta Git Bash'te şunu çalıştır:

file --mime-encoding subtitles.srt

utf-8 ya da us-ascii, dosyanın sağlam olduğunu ve hatanın oynatıcıda olduğunu gösterir. iso-8859-1 ya da unknown-8bit eski bir kod sayfası demektir. Araç hangisi olduğunu söyleyemez; o yüzden tablodaki dile göre git.

Altyazı kodlamasını düzeltmenin üç yolu

  1. Dosyayı bir metin düzenleyicide UTF-8 olarak yeniden kaydet. Tek dosya için ücretsiz ve hızlı.
  2. FFmpeg ile çevir. Tek komut, her kod sayfası; Windows, Mac ve Linux'ta çalışır.
  3. Oynatıcıya ya da kodlayıcıya kodlamayı söyle. Yeni dosya yok, ama çözüm yalnızca o programda kalır.

İlk ikisi her yerde doğru oynayan bir UTF-8 dosyası verir. Üçüncüsü, tek bilgisayardaki tek program için geçici bir çözümdür.

Yöntem 1: Altyazı dosyasını Not Defteri ya da TextEdit'te UTF-8 olarak kaydet

Windows'ta .srt dosyasını Not Defteri'nde aç. Dosya geçerli bir UTF-8 değilse Not Defteri onu Windows sistem kod sayfanla okur. Dosya sistemine uyuyorsa bu işe yarar: Türkçe bir Windows'ta Türkçe bir dosya doğru açılır. Metin doğru görünüyorsa Dosya → Farklı Kaydet'i seç, Kodlama'yı UTF-8 yap ve yeni bir adla kaydet. Metin Not Defteri'nde de yanlış görünüyorsa sistem kod sayfan dosyanınkiyle aynı değil demektir; Yöntem 2'yi kullan.

Mac'te TextEdit, dosyayı açarken kodlamayı seçmene izin verir. Apple'ın karakterler doğru görünmüyorsa ne yapılacağını anlatan rehberi adımları veriyor: Aç penceresinde Show Options'a (Seçenekleri Göster) tıkla, sonra Plain Text Encoding (Düz Metin Kodlaması) menüsünden bir kodlama seç. Altyazının diline uygun olanı seç, metnin doğru okunduğunu kontrol et, sonra bir kopyasını UTF-8 olarak kaydet. Kaydetme varsayılanı TextEdit → Settings → Open and Save (Ayarlar → Aç ve Kaydet) altında, Plain Text File Encoding (Düz Metin Dosyası Kodlaması) bölümündedir.

İki sınır var: tek seferde tek dosya ve yalnızca açtıktan sonra metin doğru göründüğünde işe yarıyor. Hâlâ bozuk görünen bir dosyayı asla kaydetme: yanlış harfleri UTF-8'e kalıcı olarak yazarsın.

Yöntem 2: Altyazıyı FFmpeg ile UTF-8'e çevir

FFmpeg, adını verdiğin her kod sayfasındaki altyazı dosyasını -sub_charenc ile okur; FFmpeg belgeleri bunu “Girdi altyazılarının karakter kodlamasını ayarla” diye tanımlar. Çıktıyı UTF-8 olarak yazar. Kendi dilinin satırını kullan. Bunların her birini test dosyalarında çalıştırdık:

ffmpeg -sub_charenc CP1252 -i french.srt french-utf8.srt
ffmpeg -sub_charenc CP1250 -i polish.srt polish-utf8.srt
ffmpeg -sub_charenc CP1251 -i russian.srt russian-utf8.srt
ffmpeg -sub_charenc CP1253 -i greek.srt greek-utf8.srt
ffmpeg -sub_charenc CP1254 -i turkish.srt turkish-utf8.srt
ffmpeg -sub_charenc CP1256 -i arabic.srt arabic-utf8.srt
ffmpeg -sub_charenc CP932 -i japanese.srt japanese-utf8.srt
ffmpeg -sub_charenc CP949 -i korean.srt korean-utf8.srt
ffmpeg -sub_charenc GB18030 -i chinese.srt chinese-utf8.srt
ffmpeg -sub_charenc CP950 -i chinese-traditional.srt chinese-traditional-utf8.srt

-sub_charenc, -i'den önce gelmeli. Yazmazsan FFmpeg şu hatayla durur; bu aynı zamanda dosyanın UTF-8 olmadığını anlamanın yoludur:

Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option

Çıktıda hâlâ yanlış harfler varsa tahmin yanlıştı. Tablodaki komşu kod sayfasını dene. CP1251 ile okunan bir Kiril dosya asla Türkçe çıkamaz; yani yanlış tahmin bir bakışta anlaşılır.

Aynı komut Windows'ta, Mac'te ve Linux'ta çalışır, FFmpeg de ücretsizdir.

Yöntem 3: Kodlamayı VLC'de, HandBrake'te ya da FFmpeg ile videoya gömerken ayarla

Yeni dosya üretmek istemiyorsan dosyayı okuyan programa söyle.

VLC. VideoLAN wiki'sinin altyazı kodlaması sayfası yolu veriyor: Tools → Preferences (Araçlar → Tercihler), sonra Subtitles / OSD → Default encoding. Kod sayfasını seç, Save'e bas ve VLC'yi yeniden başlat. Bu, belirti tablosundaki ikinci ve üçüncü satırlara yardım eder. Yalnızca o bilgisayardaki VLC'yi değiştirir: aynı dosya TV'de, telefonda ya da medya sunucusunda yine bozulur.

HandBrake. Subtitles sekmesinde bir SRT içe aktarırken HandBrake belgeleri, “‘Char Code’ açılır listesinden doğru karakter kodunun seçildiğinden emin ol” der ve yanlış olanın “çıktı dosyanda altyazı izi olmamasına” yol açacağı uyarısını yapar.

FFmpeg ile videoya gömme. subtitles filtresinin kendi charenc seçeneği var; böylece eski kod sayfasındaki bir dosyayı doğrudan görüntüye gömebilirsin:

ffmpeg -i video.mp4 -vf "subtitles=turkish.srt:charenc=CP1254" -c:a copy output.mp4

Mac'te Homebrew'un varsayılan ffmpeg'inde libass yok ve subtitles filtresinin bulunmadığını bildirir; ffmpeg-full'ı kur ve onun ikili dosyasını $(brew --prefix ffmpeg-full)/bin/ffmpeg yolundan çalıştır. Videoya gömmenin geri kalan seçenekleri altyazıyı videoya gömme rehberimizde.

Altyazıda harf yerine kutular çıkıyor: kodlama değil, font sorunu

Kutular, metnin doğru okunduğu ama fontta onu çizecek glif olmadığı anlamına gelir. Dosyayı dönüştürmek burada hiçbir şeyi değiştirmez.

Nasıl göründüğü render'a bağlı. Latin'e özgü bir font olan Impact ile stillendirilmiş bir Korece cue'yu Windows'ta FFmpeg ile videoya gömdük: libass virgülü ve noktayı Impact ile çizdi, Hangul'u kurulu başka bir fonttan aldı. Kutu yok, ama senin seçmediğin karışık bir görünüm. Kutular, makinedeki hiçbir font o yazıyı kapsamadığında çıkar; bu sunucularda ve yerleşik font seti küçük oynatıcılarda olur.

Çözüm, dili kapsayan bir fontun adını vermek. FFmpeg ile videoya gömmede bu force_style'dır:

ffmpeg -i video.mp4 -vf "subtitles=korean-utf8.srt:force_style='FontName=Malgun Gothic'" -c:a copy output.mp4

Windows'ta ve Mac'te hangi sistem fontunun hangi yazıyı kapsadığı altyazı fontu rehberimizde listelenmiş.

Sablate altyazı kodlamasını ve fontları nasıl yönetir

Sablate her altyazı dışa aktarımını, yani .srt, .vtt, .txt ve .ass dosyalarını UTF-8 olarak yazar. Bir transkripsiyon Unicode ile başlar; bu yüzden dosyaya hiçbir kod sayfası girmez ve aynı dışa aktarım Korece, Türkçe ya da Arapça'da doğru okunur.

Fontlar dil başına yönetilir. Her çeviri katmanının kendi stili var ve seçtiğin altyazı fontu yazıyı çizemiyorsa Sablate sistemle gelen bir fontla değiştirir: Korece için Windows'ta Malgun Gothic, Mac'te Apple SD Gothic Neo; Japonca için Yu Gothic UI ve Hiragino Sans; Basitleştirilmiş Çince için Microsoft YaHei ve PingFang SC. Önizleme, videoya gömmeyle aynı fontu kullanır; yani kontrol ettiğin şey, render edilen şeydir.

Dürüst bir sınır: Sablate'in .srt ve .vtt içe aktarması dosyaları UTF-8 olarak okur ve eski kod sayfalarını algılamaz. Eski bir dosyayı içe aktarmadan önce Yöntem 1 ya da Yöntem 2 ile çevir. Özellik genel bakışı editörün ve dışa aktarımların geri kalanını listeler.

Eski kod sayfalarını okurNe elde edersinPlatformlarFiyat
NotepadYalnızca sistemindeki kod sayfasınıDosyanın UTF-8 kopyasıWindowsÜcretsiz
TextEditEvet, açarken seçilirDosyanın UTF-8 kopyasıMacÜcretsiz
FFmpegEvet, herhangi birini, -sub_charenc ya da charenc ileUTF-8 bir kopya ya da altyazısı gömülü videoWindows, Mac ve LinuxÜcretsiz
VLCEvet, Default encoding ileO bilgisayarda doğru oynatımWindows, Mac ve LinuxÜcretsiz
HandBrakeEvet, SRT içe aktarırken Char Code ileAltyazısı içinde olan bir videoWindows, Mac ve LinuxÜcretsiz
SablateHayır, yalnızca UTF-8 içe aktarırUTF-8 dışa aktarımlar ve dil başına bir videoya gömme fontuWindows ve MacÜcretsiz plan; Pro tek seferlik 29 $ ya da ayda 5.99 $

Var olan bir dosyayı onarmak için ücretsiz araçlar kazanıyor: FFmpeg ve TextEdit her eski kod sayfasını okur, Sablate okumaz. Sablate, altyazıyı sen üretirken, özellikle birkaç dilde üretirken ve bu onarıma hiç ihtiyaç duymayan dosyalar istediğinde işe yarar.

Hangi çözümü kullanmalısın?

“Tek bir dosya kendi bilgisayarımdaki VLC'de yanlış görünüyor.” VLC'nin Default encoding ayarını değiştir ya da dosyayı bir kez çevir ve unut.

“Altyazı bir TV'de, telefonda, Plex'te ya da YouTube'da oynayacak.” Yöntem 1 ya da 2 ile UTF-8'e çevir. Diğer cihazlar senin VLC ayarlarını paylaşmaz; YouTube'un altyazı dosyası sayfası da bir SRT'nin “düz UTF-8 olması gerektiğini” söylüyor.

“é ve ö görüyorum.” Dosya zaten UTF-8. Oynatıcıyı düzelt ya da Not Defteri'nde bir kopyasını UTF-8 with BOM olarak kaydet; böylece dosya kodlamasını kendisi bildirir.

“Altyazıyı videoya gömüyorum.” FFmpeg komutunda charenc kullan ya da önce çevir, sonra dil için fontu kontrol et.

“Soru işaretleri görüyorum.” Dönüştürmeyi bırak ve orijinal dosyayı bul. Harfler artık bu dosyada yok.

Altyazılar bir daha bozulmasın diye ne yapmalı

Her altyazı dosyasını UTF-8 olarak kaydet. Not Defteri'nde bu, Farklı Kaydet'teki Kodlama seçimidir; ANSI'den kaçın. Mac'te TextEdit'in kaydetme kodlamasını bir kez UTF-8 yap.

Düzenlemeden önce çevir. Bozuk bir dosyayı düzenleyip sonra çevirmek tek dosyada iki kodlamayı karıştırır ve sonucu onarmak çok daha zordur.

Orijinali, dönüştürülen kopya gerçekten oynayacağı yerde doğru okunana kadar sakla: TV'de, medya sunucusunda, sitede. Eski bir cihaz UTF-8'i hâlâ yanlış okuyorsa UTF-8 with BOM olarak kaydedilmiş bir kopya genellikle sorunu çözer, çünkü BOM dosyayı, aksi halde tahmin yürütecek programlara UTF-8 olarak işaretler.

Altyazıyı sıfırdan yapıyorsan kodlama onu doğru yapmanın parçasıdır. SRT dosyası nasıl oluşturulur yazısı Windows'ta ve Mac'te kaydetme penceresindeki tuzakları anlatıyor.

Var olanı onarmak yerine altyazı üretiyorsan UTF-8 yazan ve senin için dil başına font seçen bir araçla başla. Sablate'i Windows ya da Mac için indir ve ilk dosyanı 100 transkripsiyon dilinden herhangi birinde dışa aktar.

Sık sorulan sorular

Altyazım neden bozuk karakterler gösteriyor?

Çünkü oynatıcı dosyayı yanlış karakter kodlamasıyla okudu. Altyazı dosyası hangi kodlamayı kullandığını kaydetmez; oynatıcı tahmin eder ve yanlış tahmin aksanlı ya da Latin olmayan harfleri sembollere çevirir. Dosyayı UTF-8'e çevir ya da oynatıcıya dosyanın hangi kod sayfasıyla kaydedildiğini söyle, harfler geri gelir.

Altyazı dosyası UTF-8'e nasıl çevrilir?

Dosyayı doğru okuyan bir metin düzenleyicide aç ve bir kopyasını UTF-8 olarak kaydet. Ya da dosyanın eski kod sayfasıyla FFmpeg çalıştır; Türkçe için örneğin ffmpeg -sub_charenc CP1254 -i input.srt output.srt. FFmpeg yeni dosyayı UTF-8 olarak yazar. Orijinali silmeden önce sonucu oynatıcında kontrol et.

VLC'de altyazı kodlaması nasıl değiştirilir?

Tools, ardından Preferences, ardından Subtitles / OSD yolunu aç ve Default encoding listesinden dosyanın kod sayfasını seç. Save'e tıkla ve değişikliğin geçerli olması için VLC'yi yeniden başlat. Bu ayar yalnızca o bilgisayardaki VLC oynatımını düzeltir; dosya TV'de, telefonda ya da web sitesinde de oynayacaksa dosyayı UTF-8'e çevir.

Altyazıda harfler neden soru işareti olarak görünüyor?

Çünkü metin, harflere yer olmayan bir kodlamayla kaydedilirken harfler kaybolmuş. Örneğin Batı Avrupa metni olarak kaydedilmiş bir Korece ya da Rusça altyazı, tutamadığı her harf için bir soru işareti saklar. Hiçbir dönüştürme bunları geri getirmez; orijinal dosyaya ya da kaynaktan yeni bir dışa aktarmaya ihtiyacın var.

FFmpeg'de Invalid UTF-8 in decoded subtitles text ne demek?

FFmpeg'in UTF-8 bir altyazı dosyası beklediği, ama eski bir kod sayfasından baytlar bulduğu anlamına gelir. FFmpeg'in kendi mesajı çözümü söylüyor: -i'den önce dosyanın kodlamasıyla -sub_charenc ekle (Rusça için CP1251, Korece için CP949 gibi). Dosyayı videoya gömerken ise subtitles filtresinin charenc seçeneğini kullan.

Altyazı dosyaları hangi kodlamayı kullanmalı?

UTF-8. Her yazıyı tek bir kodlamada barındırır; bu yüzden aynı dosya her cihazda ve her dilde doğru okunur. YouTube SRT dosyalarının düz UTF-8 olmasını ister; oynatıcılar, TV'ler ve medya sunucuları da UTF-8'i eski bir Windows kod sayfasından çok daha güvenilir okur. Eski bir cihaz yine de yanlış okursa UTF-8 with BOM olarak kaydetmeyi dene.