Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
Ismerteti, hogyan használja a PowerShell a karakterkódolást a sztringadatok bemenetéhez és kimenetéhez.
Hosszú leírás
A Unicode egy globális karakterkódolási szabvány. A rendszer kizárólag a Unicode-t használja karakter- és sztringmanipulációhoz. A Unicode minden aspektusának részletes leírását a Unicode Standard
A Windows támogatja a Unicode és a hagyományos karakterkészleteket. A hagyományos karakterkészletek, például a Windows-kódlapok, 8 bites értékeket vagy 8 bites értékek kombinációját használják az adott nyelv vagy földrajzi régió beállításaiban használt karakterek megjelenítéséhez.
A PowerShell alapértelmezés szerint Unicode-karakterkészletet használ. Azonban több parancsmag rendelkezik egy kódolási paraméterrel, amely megadhat kódolást egy másik karakterkészlethez. Ez a paraméter lehetővé teszi a más rendszerekkel és alkalmazásokkal való együttműködéshez szükséges karakterkódolás kiválasztását.
Az alábbi parancsmagok kódolási paramétert rendelkeznek:
- 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
A bájt sorrend jelzés
A bájtsorrend-jelölés (BOM) egy Unicode-aláírási egy fájl vagy szövegfolyam első néhány bájtjában, amely jelzi, hogy melyik Unicode-kódolást használják az adatokhoz. További információt a byte-rendelésjel dokumentációjában talál.
A Windows PowerShellben az UTF7
kivételével minden Unicode-kódolás mindig létrehoz egy anyagjegyzéket. A PowerShell (v6-os és újabb) alapértelmezés szerint utf8NoBOM
az összes szöveges kimenethez.
A legjobb általános kompatibilitás érdekében kerülje a BOM-eket az UTF-8 fájlokban. A Windows-platformokon is használt Unix-platformok és Unix-örökség segédprogramok nem támogatják a BOM-eket.
Hasonlóképpen kerülni kell UTF7
kódolást is. Az UTF-7 nem szabványos Unicode-kódolás, és AOM nélkül van megírva a PowerShell minden verziójában.
PowerShell-szkriptek létrehozása Unix-szerű platformon vagy windowsos platformfüggetlen szerkesztő használatával, például Visual Studio Code-tal, UTF8NoBOM
kódolt fájlt eredményez. Ezek a fájlok jól működnek a PowerShellben, de a Windows PowerShellben megszakadhatnak, ha a fájl nem Ascii karaktereket tartalmaz.
Ha nem Ascii karaktereket kell használnia a szkriptekben, mentse őket UTF-8 formátumban a BOM használatával. A BOM nélkül a Windows PowerShell helytelenül értelmezi a szkriptet, mivel az az örökölt "ANSI" kódlapon van kódolva. Ezzel szemben az UTF-8 BOM-et tartalmazó fájlok problémásak lehetnek a Unix-szerű platformokon. Számos Unix-eszköz, például cat
, sed
, awk
, és egyes szerkesztők, például gedit
nem tudják, hogyan kell kezelni a BOM-t.
Karakterkódolás a Windows PowerShellben
A PowerShell 5.1-ben a Kódolás paraméter a következő értékeket támogatja:
-
Ascii
Ascii (7 bites) karakterkészletet használ. -
BigEndianUnicode
UTF-16-ot használ a big-endian (nagytól kicsi felé) bájtsorrenddel. -
BigEndianUTF32
UTF-32-t használ a big-endian bájtsorrenddel. -
Byte
egy karakterhalmazt kódol bájtok sorozatába. -
Default
A rendszer aktív kódlapjának (általában ANSI) megfelelő kódolást használja. -
Oem
A rendszer aktuális OEM-kódlapjának megfelelő kódolást használja. -
String
ugyanaz, mintUnicode
. -
Unicode
UTF-16-ot használ a kis végű bájtsorrenddel. -
Unknown
ugyanaz, mintUnicode
. -
UTF32
UTF-32-t használ a kis végű bájtsorrenddel. -
UTF7
UTF-7-et használ. -
UTF8
UTF-8-at használ (BOM-tal).
A Windows PowerShell általában alapértelmezés szerint a Unicode UTF-16LE kódolást használja. A Windows PowerShell parancsmagjai által használt alapértelmezett kódolás azonban nem konzisztens.
Jegyzet
Bármelyik Unicode-kódolás használata, kivéve UTF7
, mindig létrehoz egy BOM-ot.
Fájlokba kimenetet író parancsmagok esetén:
Out-File
és az átirányítási operátorok>
és>>
UTF-16LE-t hoznak létre, ami jelentősen különbözikSet-Content
-tól ésAdd-Content
-től.New-ModuleManifest
ésExport-Clixml
UTF-16LE-fájlokat is létrehoz.Ha a célfájl üres vagy nem létezik,
Set-Content
ésAdd-Content
használjonDefault
kódolást.Default
az aktív rendszer területi beállításának ANSI örökölt kódlapja által megadott kódolás.Export-Csv
Ascii
fájlokat hoz létre, de eltérő kódolást használ Append paraméter használatakor (lásd alább).Export-PSSession
alapértelmezés szerint UTF-8 fájlokat hoz létre a BOM használatával.New-Item -Type File -Value
létrehoz egy BOM-less UTF-8 fájlt.Send-MailMessage
alapértelmezés szerintAscii
kódolást használ.Start-Transcript
létrehozUtf8
fájlokat egy anyagjegyzékkel. A Append paraméter használata esetén a kódolás eltérő lehet (lásd alább).
Meglévő fájlhoz hozzáfűző parancsok esetén:
Out-File -Append
és a>>
átirányítási operátor nem próbál megegyezni a meglévő célfájl tartalmának kódolásával. Ehelyett az alapértelmezett kódolást használják, kivéve, ha a Kódolás paramétert használják. A fájlok eredeti kódolását kell használnia a tartalom hozzáfűzésekor.Explicit Kódolás paraméter hiányában
Add-Content
észleli a meglévő kódolást, és automatikusan alkalmazza azt az új tartalomra. Ha a meglévő tartalom nem tartalmaz bájt sorrendi jelölést,Default
ANSI-kódolás kerül alkalmazásra. AAdd-Content
viselkedése a PowerShellben (v6-os és újabb verziókban) ugyanaz, kivéve, hogy az alapértelmezett kódolásUtf8
.Export-Csv -Append
megegyezik a meglévő kódolással, ha a célfájl anyagjegyzéket tartalmaz. A BOM hiányábanUtf8
kódolást használ.Start-Transcript -Append
megegyezik az anyagjegyzéket tartalmazó fájlok meglévő kódolásával. BOM hiányában alapértelmezés szerint aAscii
kódolást használja. Ez a kódolás adatvesztést vagy karaktersérülést okozhat, ha az átiratban szereplő adatok többbájtos karaktereket tartalmaznak.
Karakterlánc adatokat BOM nélkül olvasó parancsmagok számára:
Get-Content
ésImport-PowerShellDataFile
aDefault
ANSI-kódolást használja. Az ANSI az, amit a PowerShell-motor használ, amikor fájlból olvas be forráskódot.Import-Csv
,Import-Clixml
ésSelect-String
feltételeziUtf8
-at BOM hiányában.
Karakterkódolás a PowerShellben
A PowerShellben (7.1-s vagy újabb verzió) a Kódolás paraméter a következő értékeket támogatja:
-
ascii
: Az ASCII (7 bites) karakterkészlet kódolását használja. -
ansi
: Az aktuális kultúra ANSI-kódlapjának kódolását használja. Ez a beállítás a PowerShell 7.4-ben lett hozzáadva. -
bigendianunicode
: UTF-16 formátumban kódolja a big-endian bájtsorrendet. -
bigendianutf32
: Az UTF-32 formátumot big-endian bájtsorrend használatával kódolja. -
oem
: Az alapértelmezett kódolást használja MS-DOS és konzolprogramokhoz. -
unicode
: Az UTF-16 formátumban kódol kis végű bájtsorrend használatával. -
utf7
: UTF-7 formátumban kódol. -
utf8
: UTF-8 formátumban kódol (nem BOM). -
utf8BOM
: Kódol UTF-8 formátumban bájtsorrendi jelöléssel (BOM) -
utf8NoBOM
: UTF-8 formátumban kódol byte order mark (BOM) nélkül -
utf32
: A UTF-32 formátumban, kis végű bájtsorrend alkalmazásával kódolja.
A PowerShell alapértelmezésként utf8NoBOM
-re állítja be az összes kimenetet.
A PowerShell 6.2-től kezdődően a Kódolás paraméter lehetővé teszi a regisztrált kódlapok (például -Encoding 1251
) numerikus azonosítóit vagy a regisztrált kódlapok sztringneveit (például -Encoding "windows-1251"
). További információt a Encoding.CodePage.NET-dokumentációjában talál.
A PowerShell 7.4-től kezdve a ANSI
paraméter értékével anélkül adhat meg numerikus azonosítót az aktuális kultúra ANSI-kódlapjához, hogy manuálisan kellene megadnia.
Az alapértelmezett kódolás módosítása
A PowerShell két alapértelmezett változóval rendelkezik, amelyek az alapértelmezett kódolási viselkedés módosítására használhatók.
$PSDefaultParameterValues
$OutputEncoding
További információért lásd: about_Preference_Variables.
A PowerShell 5.1-től kezdve az átirányítási operátorok (>
és >>
) meghívják a Out-File
parancsmagot. Ezért beállíthatja az alapértelmezett kódolást a $PSDefaultParameterValues
beállítási változó használatával, ahogyan az ebben a példában látható:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
Az alábbi utasítással módosíthatja az alapértelmezett kódolást az Kódolás paramétert tartalmazó parancsmagok esetében.
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Fontos
Ha ezt a parancsot a PowerShell-profiljába helyezi, az az adott munkamenetre érvényes globális beállítás lesz, amely minden olyan parancsot és szkriptet érint, amely nem határoz meg explicit módon kódolást.
Hasonlóképpen, érdemes olyan parancsokat is belefoglalnia a szkriptekbe vagy modulokba, amelyeknek ugyanúgy kellene viselkedniük. Ezek a parancsok biztosítják, hogy a parancsmagok ugyanúgy viselkedjenek akkor is, ha egy másik felhasználó futtat egy másik számítógépen vagy a PowerShell egy másik verziójában.
Az automatikus változó $OutputEncoding
befolyásolja a PowerShell külső programokkal való kommunikációhoz használt kódolását. Nincs hatással arra a kódolásra, amelyet a kimeneti átirányítási operátorok és a PowerShell-parancsmagok a fájlokba való mentéshez használnak.