PowerShell’de Türkçe karakter sorununu giderin

Betiğiniz ş yerine ÅŸ ya da ? yazıyor, konsolda harfler bozuk mu görünüyor? Windows PowerShell 5.1 komuta göre farklı kodlama kullanır. İşte nedenleri ve doğru parametreler – bozuk dosyaları yukarıda tarayıcınızda onarabilirsiniz.

Metinle ve şu dosyalarla çalışır:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Örneğin Excel dışa aktarımları, veritabanı yedekleri, altyazılar veya web sitesi kodu.

Düzelt

  1. Bir dosya bırakın veya metni yapıştırın
  2. Düzeltme otomatik yapılır
  3. Kopyalayın veya indirin
ya da bir dosyayı buraya sürükleyin
  • Dosya yükleme yok. Dosyalarınız doğrudan tarayıcınızda düzeltilir ve cihazınızdan asla çıkmaz.

  • AB’de sunucular. Mojibuster, Finlandiya’daki (AB) bir sunucuda çalışır; Genel Veri Koruma Tüzüğü (GDPR) geçerlidir. GDPR metni (EUR-Lex)

Asıl sorun: her komutun kodlaması ayrı

Windows PowerShell 5.1’de neredeyse her komutun kendi varsayılan kodlaması vardır: Get-Content BOM’suz dosyaları ANSI (Türkçe Windows’ta Windows-1254) olarak okur, Out-File ve > UTF-16 yazar, Set-Content ANSI yazar, Export-Csv ise ASCII. PowerShell 7 bunu birleştirdi ve her yerde BOM’suz UTF-8 kullanır.

PowerShell 5.1’de Get-Content ile okunan UTF-8 dosyası

Önce

Kullanıcı;Departman;Şehir
Şule Çelik;Satış;İstanbul
Oğuz Işık;Satın alma;Eskişehir

Sonra

Kullanıcı;Departman;Şehir
Şule Çelik;Satış;İstanbul
Oğuz Işık;Satın alma;Eskişehir

Dosyaları doğru okuyun ve yazın

  • Get-Content veri.csv -Encoding UTF8 BOM olmasa da UTF-8 dosyaları doğru okur.
  • Set-Content, Out-File ve Add-Content ile UTF-8 yazmak için -Encoding UTF8 kullanın – 5.1’de her zaman BOM’lu yazılır.
  • ASCII varsayılanı Türkçe harfleri ? yapar; onun yerine Export-Csv veri.csv -Encoding UTF8 -NoTypeInformation kullanın.
  • Tüm komutlar için tek seferde: betiğin başına $PSDefaultParameterValues['*:Encoding'] = 'utf8' ekleyin.
  • Eski bir Türkçe ANSI dosyayı okumanız gerekirse: Get-Content eski.txt -Encoding Default (5.1) ya da PowerShell 7’de -Encoding windows-1254.

Invoke-RestMethod ve Invoke-WebRequest ile web istekleri

Sunucu Content-Type içinde karakter seti belirtmezse Windows PowerShell 5.1 yanıtı ISO-8859-1 olarak çözer. UTF-8 yanıtlarda ş yerine ÅŸ çıkar. Çözüm: yanıtı bayt olarak alıp kendiniz çözün, örneğin [Text.Encoding]::UTF8.GetString((Invoke-WebRequest $url).RawContentStream.ToArray()).

Özel karakterli betik dosyaları

Betiği BOM’suz UTF-8 kaydederseniz Windows PowerShell 5.1 onu ANSI olarak okur. Write-Host 'Çağrı' gibi metinlerdeki harfler ÇaÄŸrı olarak görünür. .ps1 dosyalarını BOM’lu UTF-8 kaydedin – VS Code’da durum çubuğundaki kodlamadan, Notepad++ içinde Encoding menüsündeki UTF-8-BOM seçeneğiyle.

Konsol

Yalnızca konsol penceresi ü yerine ├╝ gibi karakterler gösteriyorsa dosya çoğunlukla sağlamdır – konsol UTF-8’i DOS kod sayfası olarak okuyordur (Türkçe Windows’ta genelde 857). Bu kalıp hakkında daha fazlası. Çıktıyı [Console]::OutputEncoding = [Text.Encoding]::UTF8 ile değiştirin. Dış programlara aktardığınız çıktı için ayrıca $OutputEncoding = [Text.Encoding]::UTF8 ayarlayın.

Dosya zaten bozuk yazıldıysa yukarıdaki kutuya bırakın: Mojibuster ÅŸ ve benzerlerini onarır, ANSI dosyaları UTF-8’e çevirir. Dosyada zaten soru işareti varsa metin kayıptır – bkz. Türkçe harfler yerine soru işareti.

Sık sorulan sorular

Hangi PowerShell sürümünü kullanıyorum?

$PSVersionTable.PSVersion gösterir. 5.1 Windows’a yerleşik Windows PowerShell’dir; 7 ve sonrası yalnızca PowerShell adını taşır ve varsayılan olarak UTF-8 kullanır.

Excel PowerShell’den çıkan CSV’mi neden yanlış açıyor?

PowerShell 7 BOM’suz UTF-8 yazar, Excel bunu tanımaz. -Encoding utf8BOM kullanın ya da dosyayı Mojibuster’da BOM’lu kaydedin. Ayrıntı için Excel’de Türkçe karakter sorunu.

chcp 65001 gerekir mi?

Yalnızca konsol kod sayfasına uyan programlar için. PowerShell içinde [Console]::OutputEncoding yeterlidir. Konsolda ├╝ veya ┼ş görürseniz metni Mojibuster onarır: Mac ve konsolda Türkçe karakter sorunu.

Diğer rehberler