Batch script │'.bat' veya '.cmd' dosyalarında Türkçe karakter hatası nasıl çözülür?
Batch üzerinde kodlama yaptığınızda Türkçe karakter kullanıyorsanız. Dosyayı çalıştırdığınız da karakterler bozuk gözükebilir. Bu sorunun iki çözüm yolu vardır.
Birinci yol ► chcp 65001;
Komut dosyası içine chcp 65001 komutu uygulanarak kod sayfası değiştirilmelidir. Bu komut Türkçe karakterlerin artık bozuk görünmesini engelleyecektir. Ancak bazı handikapları var. Windows 10 altındaki sürümlerde bu komut çalışmaz. Ayrıca .bat/cmd dosyası içinde Powershell komutu uyguladığınızda komut ekranı kompakt hale gelecektir. Bunun olmasını engellemek istiyorsanız kod sayfasını powershell komutunu uygulamadan önce chcp 437 olarak değiştirip, powershell işlemi sonrası yeniden chcp 65001 uygulayarak kompakt ekran sorununu giderebilirsiniz.
İkinci yol ► OEM 857;
Bu yolu uygulamak için Notepad++ uygulamasını yüklemeniz gerekiyor. Notepad++ uygulamasını yükledikten sonra .bat dosyası içine echo off&cls
gibi kısa iki satır kod yazın. İçeride bir şeyler yazmaz ise siz değiştirseniz bile yazdığınızda UTF-8 olur. Yöntemi uygulamak için üst menüden Kodlama > Karakter Takımı > Türkçe > OEM857 seçin. İlk yöntemde bahsettiğimiz gibi bununda iyi ve kötü yanları bulunmaktadır. OEM857 uyguladıktan sonra çalışmanızı kaydedip sonradan açtığınızda karşınıza bozuk karakterler çıkacaktır. Bunun sebebi Notepad++ ve tüm editörlerin UTF-8 karakter takımıyla açılmasıdır. Siz notepad++ ile kodlarınızı her açtığınızda Kodlama > Karakter Takımı > Türkçe > OEM857 uygulamak zorundasınız. Bunun güzel yanı Windows 10/11 ve altındaki sürümlerde çalışmasıdır. Bu bölümde Powershell komutlarıyla alakalı bir sorun bulunmamaktadır.
• Windows 10 altı sürümler içinde çalışma yapıyorsanız veya yaptığınız çalışma onları da kapsıyorsa OEM 857 kullanmak zorundasınız.
• Ancak Windows 10 ve üstü için bir çalışma yapıyorsanız kesinlikle chcp 65001 yani birinci yolu kullanmalısınız. Ayrıca projenizi açık olarak paylaştığınızda Github gibi sitelerde karakterlerin bozuk görünmesi hoş durmayacaktır.