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 UTF7
herhangi 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 UTF8NoBOM
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. Ü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
, sed
ve gibi awk
birç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:
-
Ascii
Ascii (7 bit) karakter kümesini kullanır. -
BigEndianUnicode
UTF-16'yi büyük endian bayt düzeniyle kullanır. -
BigEndianUTF32
UTF-32'yi büyük endian bayt düzeniyle kullanır. -
Byte
Bir karakter kümesini bayt dizisine kodlar. -
Default
Sistemin etkin kod sayfasına (genellikle ANSI) karşılık gelen kodlamayı kullanır. -
Oem
Sistemin geçerli OEM kod sayfasına karşılık gelen kodlamayı kullanır. -
String
ileUnicode
aynı. -
Unicode
UtF-16'nın küçük endian bayt sırasını kullanır. -
Unknown
ileUnicode
aynı. -
UTF32
UtF-32'yi little-endian bayt düzeniyle kullanır. -
UTF7
UTF-7 kullanır. -
UTF8
UTF-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 UTF7
herhangi bir Unicode kodlaması kullanarak her zaman bir BOM oluşturur.
Dosyalara çıktı yazan cmdlet'ler için:
Out-File
ve yeniden yönlendirme işleçleri>
ile>>
utf-16LE oluşturur. Bu, ve'denSet-Content
Add-Content
önemli ölçüde farklıdır.New-ModuleManifest
veExport-Clixml
ayrıca UTF-16LE dosyaları oluşturun.Hedef dosya boş olduğunda veya mevcut
Set-Content
olmadığında kodlamayıAdd-Content
kullanınDefault
.Default
, etkin sistem yerel ayarının ANSI eski kod sayfası tarafından belirtilen kodlamadır.Export-Csv
dosyaları oluştururAscii
ancak Append parametresi kullanılırken farklı kodlama kullanır (aşağıya bakın).Export-PSSession
varsayılan olarak BOM ile UTF-8 dosyaları oluşturur.New-Item -Type File -Value
bom olmayan bir UTF-8 dosyası oluşturur.Send-MailMessage
varsayılan olarak kodlama kullanırAscii
.Start-Transcript
bir Ü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-Content
mevcut kodlamayı algılar ve yeni içeriğe otomatik olarak uygular. Mevcut içerikte ürün reçetesi yoksa ANSIDefault
kodlaması kullanılır.Add-Content
varsayılan kodlamanın olması dışında, davranışı PowerShell'de (v6 ve üzeri) aynıdırUtf8
.Export-Csv -Append
hedef 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-Content
veImport-PowerShellDataFile
ANSI kodlamasınıDefault
kullanır. ANSI, PowerShell altyapısının dosyalardan kaynak kodu okurken kullandığı özelliktir.Import-Csv
,Import-Clixml
veSelect-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 bkz.
PowerShell