Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
PowerShell'in dize verilerinin girişi ve çıkışı için karakter kodlamasını nasıl kullandığını açıklar.
Uzun açıklama
Unicode, dünya çapında bir karakter kodlama standardıdır. Sistem, karakter ve dize işleme için yalnızca Unicode kullanır. Unicode'un tüm yönlerinin ayrıntılı açıklaması için bkz. Unicode Standart.
Windows, Unicode ve geleneksel karakter kümelerini destekler. Windows kod sayfaları gibi geleneksel karakter kümeleri, belirli bir dil veya coğrafi bölge ayarlarında kullanılan karakterleri temsil etmek için 8 bit değerleri veya 8 bit değerlerin birleşimlerini kullanır.
PowerShell varsayılan olarak bir Unicode karakter kümesi kullanır. Ancak, birkaç cmdlet'in farklı bir karakter kümesi için kodlama belirtebilen bir Kodlama parametresi vardır. Bu parametre, diğer sistem ve uygulamalarla birlikte çalışabilirlik için ihtiyacınız olan karakter kodlamasını seçmenize olanak tanır.
Aşağıdaki cmdlet'ler Kodlama parametresine sahiptir:
- Microsoft.PowerShell.Management
- Add-Content
- Get-Content
- Set-Content
- Microsoft.PowerShell.Utility
- Export-Clixml
- Export-Csv
- Export-PSSession
- Format-Hex
- Import-Csv
- Out-File
- Select-String
- Send-MailMessage
Bayt-sipariş işareti
Bayt sırası işareti (BOM), veriler için hangi Unicode kodlamasının kullanıldığını gösteren bir dosya veya metin akışının ilk birkaç bayt içindeki Unicode imzası. Daha fazla bilgi için Bayt sipariş işareti belgelerine bakın.
Windows PowerShell'de, UTF7dışında herhangi bir Unicode kodlaması her zaman bir bayt sırası işareti oluşturur. PowerShell (v6 ve üzeri) varsayılan olarak tüm metin çıkışı için utf8NoBOM'dır.
Genel olarak en iyi uyumluluk için, UTF-8 dosyalarında BOM bulundurmayın. Unix platformları ve Windows platformlarında da kullanılan Unix kökenli yardımcı programlar, BOM'ları desteklemez.
Benzer şekilde, UTF7 kodlamadan kaçınılmalıdır. UTF-7 standart bir Unicode kodlaması değildir ve PowerShell'in tüm sürümlerinde bom olmadan yazılır.
Unix benzeri bir platformda PowerShell betikleri oluşturmak veya Visual Studio Code gibi Windows'ta platformlar arası bir düzenleyici kullanmak, UTF8NoBOMkullanılarak kodlanmış bir dosyayla sonuçlanır. Bu dosyalar PowerShell'de sorunsuz çalışır, ancak dosya Ascii olmayan karakterler içeriyorsa Windows PowerShell'de bozulabilir.
Betiklerinizde Ascii olmayan karakterler kullanmanız gerekiyorsa, bunları BOM ile UTF-8 olarak kaydedin. BOM olmadan, Windows PowerShell betiğinizi eski "ANSI" kod sayfasında kodlanmış olarak yanlış yorumlar. Buna karşılık, UTF-8 BOM'a sahip dosyalar Unix benzeri platformlarda sorunlu olabilir.
cat, sed, awkgibi birçok Unix aracı ve gedit gibi bazı düzenleyiciler BOM'u nasıl işleyeceklerini bilmez.
Windows PowerShell'de karakter kodlama
PowerShell 5.1'de Kodlama parametresi aşağıdaki değerleri destekler:
-
AsciiAscii (7 bit) karakter kümesini kullanır. -
BigEndianUnicode, büyük endian bayt sırası ile UTF-16 kullanır. -
BigEndianUTF32UTF-32'yi büyük endian bayt düzeniyle kullanır. -
ByteBir karakter kümesini bayt dizisine kodlar. -
DefaultSistemin etkin kod sayfasına (genellikle ANSI) karşılık gelen kodlamayı kullanır. -
OemSistemin geçerli OEM kod sayfasına karşılık gelen kodlamayı kullanır. -
StringUnicodeile aynıdır. -
UnicodeUTF-16'yı little-endian bayt sırasıyla kullanır. -
UnknownUnicodeile aynıdır. -
UTF32küçük-endian bayt düzeniyle UTF-32'yi kullanır. -
UTF7UTF-7 kullanır. -
UTF8UTF-8 kullanır (BOM ile).
Genel olarak, Windows PowerShell varsayılan olarak UNICODE UTF-16LE kodlamasını kullanır. Ancak, Windows PowerShell'de cmdlet'ler tarafından kullanılan varsayılan kodlama tutarlı değildir.
Not
UTF7dışında herhangi bir Unicode kodlaması kullanıldığında, her zaman bir bayt sırası işareti oluşturur.
Dosyalara çıktı yazan cmdlet'ler için:
Out-Fileve yeniden yönlendirme işleçleri>ve>>UTF-16LE oluşturur; bu ise özellikleSet-ContentveAdd-Content'ten farklıdır.New-ModuleManifestveExport-Clixmlayrıca UTF-16LE dosyaları da oluşturur.Hedef dosya boş olduğunda veya mevcut olmadığında,
Set-ContentveAdd-ContentDefaultkodlamayı kullanır.Default, etkin sistem yerel ayarının ANSI eski kod sayfası tarafından belirtilen kodlamadır.Export-CsvAsciidosyaları oluşturur ancak Ekleme parametresi kullanılırken farklı kodlama kullanır (aşağıya bakın).Export-PSSessionvarsayılan olarak BOM ile UTF-8 dosyaları oluşturur.New-Item -Type File -Valuebom olmayan bir UTF-8 dosyası oluşturur.Send-MailMessagevarsayılan olarakAsciikodlama kullanır.Start-Transcript,Utf8dosyalarını BOM ile oluşturur. Ekleme parametresi kullanıldığında kodlama farklı olabilir (aşağıya bakın).
Var olan bir dosyaya eklenen komutlar için:
Out-File -Appendve>>yeniden yönlendirme işleci, var olan hedef dosyanın içeriğinin kodlamasını eşleştirmeye çalışmaz. Bunun yerine, Kodlama parametresi kullanılmadığı sürece varsayılan kodlamayı kullanırlar. İçerik eklerken özgün kodlama dosyalarını kullanmanız gerekir.Açık bir Kodlama parametresi olmadığında,
Add-Contentvar olan kodlamayı algılar ve yeni içeriğe otomatik olarak uygular. Mevcut içerikte BOM yoksa,DefaultANSI kodlaması kullanılır. varsayılan kodlamanınAdd-ContentdışındaUtf8davranışı PowerShell'de (v6 ve üzeri) aynıdır.Hedef dosya bir bayt sırası işareti (BOM) içerdiğinde
Export-Csv -Appendmevcut kodlamayla uyumlu olur. BOM olmadığında,Utf8kodlamasını kullanır.Start-Transcript -Append, BOM içeren dosyaların mevcut kodlaması ile eşleşir. BOM olmadığında, varsayılan olarakAsciikodlaması olur. Bu kodlama, transkriptteki veriler çok baytlı karakterler içerdiğinde veri kaybına veya karakter bozulmasına neden olabilir.
BOM olmadığında dize verilerini okuyan cmdlet'ler için:
Get-ContentveImport-PowerShellDataFileDefaultANSI kodlamasını kullanır. ANSI, PowerShell altyapısının dosyalardan kaynak kodu okurken kullandığı özelliktir.BOM yokluğunda,
Import-Csv,Import-ClixmlveSelect-StringUtf8'ü varsayar.
PowerShell'de karakter kodlama
PowerShell'de (v7.1 ve üzeri), Kodlama parametresi aşağıdaki değerleri destekler:
-
ascii: ASCII (7 bit) karakter kümesi için kodlamayı kullanır. -
ansi: Geçerli kültürün ANSI kod sayfasının kodlamasını kullanır. Bu seçenek PowerShell 7.4'e eklendi. -
bigendianunicode: Büyük endian bayt sırasını kullanarak UTF-16 biçiminde kodlar. -
bigendianutf32: Büyük endian bayt sırasını kullanarak UTF-32 biçiminde kodlar. -
oem: MS-DOS ve konsol programları için varsayılan kodlamayı kullanır. -
unicode: Little-endian bayt sırasını kullanarak UTF-16 biçiminde kodlar. -
utf7: UTF-7 biçiminde kodlar. -
utf8: UTF-8 biçiminde kodlar (BOM yok). -
utf8BOM: Bayt Sırası İşareti (BOM) ile UTF-8 biçiminde kodlar -
utf8NoBOM: Bayt Sırası İşareti (BOM) olmadan UTF-8 biçiminde kodlar -
utf32: UTF-32 biçiminde, little-endian bayt sırası kullanılarak kodlar.
PowerShell'in tüm çıktıları varsayılan olarak utf8NoBOM düzenindedir.
PowerShell 6.2'den başlayarak, Kodlama parametresi, kayıtlı kod sayfalarının sayısal kimliklerine (-Encoding 1251gibi) veya kayıtlı kod sayfalarının dize adlarına (-Encoding "windows-1251"gibi) de izin verir. Daha fazla bilgi için Encoding.CodePageiçin .NET belgelerine bakın.
PowerShell 7.4'den başlayarak, ANSI parametresinin değerini kullanarak geçerli kültürün ANSI kod sayfasının sayısal kimliğini el ile belirtmek zorunda kalmadan geçirebilirsiniz.
Varsayılan kodlamayı değiştirme
PowerShell,varsayılan kodlama davranışını değiştirmek için kullanılabilecek iki varsayılan değişkene sahiptir.
$PSDefaultParameterValues$OutputEncoding
Daha fazla bilgi için bkz. about_Preference_Variables.
PowerShell 5.1'den başlayarak, yeniden yönlendirme işleçleri (> ve >>) Out-File cmdlet'ini çağırır. Bu nedenle, bu örnekte gösterildiği gibi $PSDefaultParameterValues tercih değişkenini kullanarak bunların varsayılan kodlamasını ayarlayabilirsiniz:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
Kodlama parametresine sahip tüm cmdlet'ler için varsayılan kodlamayı değiştirmek için aşağıdaki deyimi kullanın.
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Önemli
Bu komutu PowerShell profilinize yerleştirmek, tercihi açıkça kodlama belirtmeyen tüm komutları ve betikleri etkileyen bir oturum genel ayarı yapar.
Benzer şekilde, betiklerinize veya modüllerinize aynı şekilde davranmasını istediğiniz bu tür komutları eklemeniz gerekir. Bu komutların kullanılması, cmdlet'lerin başka bir kullanıcı, farklı bir bilgisayarda veya farklı bir PowerShell sürümünde çalıştırıldığında bile aynı şekilde davranmasını sağlar.
Otomatik değişken $OutputEncoding PowerShell'in dış programlarla iletişim kurmak için kullandığı kodlamayı etkiler. Çıkış yeniden yönlendirme işleçlerinin ve PowerShell cmdlet'lerinin dosyalara kaydetmek için kullandığı kodlama üzerinde hiçbir etkisi yoktur.
Ayrıca bakınız
- about_Preference_Variables
- Bayt sırası işareti
- Kod Sayfaları - Win32 uygulamaları
- Encoding.CodePage
- .NET'de karakter kodlamaya giriş
- Unicode Standart
- UTF-16LE
PowerShell