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 Standardı.
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ıra işareti (BOM), bir dosyanın veya metin akışının ilk birkaç bayt içinde yer alan ve veriler için hangi Unicode kodlamasının kullanıldığını gösteren bir Unicode imzasıdır . Daha fazla bilgi için Bayt sipariş işareti belgelerine bakın.
Windows PowerShell'de, dışında UTF7herhangi bir Unicode kodlaması her zaman bir ürün reçetesi oluşturur. PowerShell (v6 ve üzeri) tüm metin çıktıları utf8NoBOM için varsayılan olarak kullanılır.
Genel olarak en iyi uyumluluk için, UTF-8 dosyalarında ürün reçetelerini kullanmaktan kaçının. Windows Platformlarında da kullanılan Unix platformları ve Unix-heritage yardımcı programları, ürün reçetelerini 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, kullanılarak UTF8NoBOMkodlanmış 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. Ürün reçetesi 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, sedve gibi awkbirçok Unix aracı ve bazı gedit düzenleyiciler BOM'u nasıl ele aldıracaklarını 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. -
BigEndianUnicodeUTF-16'yi büyük endian bayt düzeniyle 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. -
StringileUnicodeaynı. -
UnicodeUtF-16'nın küçük endian bayt sırasını kullanır. -
UnknownileUnicodeaynı. -
UTF32UtF-32'yi little-endian bayt düzeniyle 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
dışında UTF7herhangi bir Unicode kodlaması kullanarak her zaman bir BOM oluşturur.
Dosyalara çıktı yazan cmdlet'ler için:
Out-Fileve yeniden yönlendirme işleçleri>ile>>utf-16LE oluşturur. Bu, ve'denSet-ContentAdd-Contentönemli ölçüde farklıdır.New-ModuleManifestveExport-Clixmlayrıca UTF-16LE dosyaları oluşturun.Hedef dosya boş olduğunda veya mevcut
Set-Contentolmadığında kodlamayıAdd-ContentkullanınDefault.Default, etkin sistem yerel ayarının ANSI eski kod sayfası tarafından belirtilen kodlamadır.Export-Csvdosyaları oluştururAsciiancak Append 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 olarak kodlama kullanırAscii.Start-Transcriptbir ÜRÜN REÇETESI ile dosya oluştururUtf8. Append parametresi kullanıldığında kodlama farklı olabilir (aşağıya bakın).
Var olan bir dosyaya eklenen komutlar için:
Out-File -Append>>ve yeniden yönlendirme işleci, mevcut 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-Contentmevcut kodlamayı algılar ve yeni içeriğe otomatik olarak uygular. Mevcut içerikte ürün reçetesi yoksa ANSIDefaultkodlaması kullanılır.Add-Contentvarsayılan kodlamanın olması dışında, davranışı PowerShell'de (v6 ve üzeri) aynıdırUtf8.Export-Csv -Appendhedef dosya bir BOM içerdiğinde mevcut kodlamayla eşleşir. Bom olmadığında kodlamayı kullanırUtf8.Start-Transcript -Append, ürün reçetesi içeren dosyaların mevcut kodlaması ile eşleşir. Ürün reçetesi olmadığında varsayılan olarak kodlama olurAscii. Bu kodlama, transkriptteki veriler çok baytlı karakterler içerdiğinde veri kaybına veya karakter bozulmasına neden olabilir.
Ürün reçetesi olmadığında dize verilerini okuyan cmdlet'ler için:
Get-ContentveImport-PowerShellDataFileANSI kodlamasınıDefaultkullanır. ANSI, PowerShell altyapısının dosyalardan kaynak kodu okurken kullandığı özelliktir.Import-Csv,Import-ClixmlveSelect-Stringürün reçetesinin yokluğunda varsayınUtf8.
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 Sipariş İşareti (BOM) olmadan UTF-8 biçiminde kodlar -
utf32: Little-endian bayt sırasını kullanarak UTF-32 biçiminde kodlar.
Tüm çıkışlar utf8NoBOM için PowerShell varsayılan olarak kullanılır.
PowerShell 6.2'den başlayarak Kodlama parametresi, kayıtlı kod sayfalarının (gibi-Encoding 1251) sayısal kimliklerine veya kayıtlı kod sayfalarının dize adlarına da (gibi-Encoding "windows-1251") izin verir. Daha fazla bilgi için Encoding.CodePage için .NET belgelerine bakın.
PowerShell 7.4'den başlayarak Kodlama parametresinin değerini ANSI 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 >>) cmdlet'ini Out-File çağırır. Bu nedenle, bu örnekte gösterildiği gibi tercih değişkenini kullanarak bunların varsayılan kodlamasını $PSDefaultParameterValues 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
PowerShell