about_Character_Encoding
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 Standardban találja.
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.
A következő parancsmagok kódolási paramétere van:
- 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 byte-order-mark
A byte-order-mark (BOM) egy Unicode-aláírás 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ó: Byte order mark documentation.
A Windows PowerShellben minden Unicode-kódolás, kivéve UTF7
, mindig létrehoz egy anyagjegyzéket. A PowerShell (v6-os és újabb) alapértelmezés szerint az utf8NoBOM
összes szöveges kimenetre vonatkozik.
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 a 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 platformfüggetlen szerkesztő használatával Windowson, például Visual Studio Code-on, egy kódolt UTF8NoBOM
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 néhány szerkesztő, például gedit
nem tudja, 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
Az UTF-16-ot használja a big-endian bájtsorrenddel.BigEndianUTF32
UTF-32-t használ a big-endian bájtsorrenddel.Byte
Egy karakterkészletet bájtok sorozatába kódol.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
a .Unicode
Az UTF-16-ot használja a kis végű bájtsorrenddel.Unknown
Ugyanaz, mintUnicode
a .UTF32
Az UTF-32-t használja 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 az Unicode UTF-16LE kódolást használja. A Windows PowerShell parancsmagjai által használt alapértelmezett kódolás azonban nem konzisztens.
Feljegyzés
Bármilyen Unicode-kódolást használ, kivéve UTF7
, mindig létrehoz egy anyagjegyzéket.
Fájlokba kimenetet író parancsmagok esetén:
Out-File
és az átirányítási operátorokat>
, és>>
hozza létre az UTF-16LE-t, amely különösen különbözik aSet-Content
Add-Content
.New-ModuleManifest
ésExport-CliXml
UTF-16LE-fájlokat is létrehozhat.Ha a célfájl üres vagy nem létezik,
Set-Content
ésAdd-Content
kódolást használDefault
.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
fájlokat hoz létreAscii
, de más kódolást használ a 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
BOM-less UTF-8 fájlt hoz létre.Send-MailMessage
alapértelmezés szerint kódolást használAscii
.Start-Transcript
fájlokat hoz létreUtf8
egy anyagjegyzékkel. A Hozzáfűzés 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 az átirányítási>>
operátor nem próbálja meg egyezni 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ási paraméter hiányában észleli a meglévő kódolást,
Add-Content
és automatikusan alkalmazza az új tartalomra. Ha a meglévő tartalom nem tartalmaz anyagjegyzéket,Default
a rendszer ANSI-kódolást használ. A viselkedéseAdd-Content
ugyanaz a PowerShellben (v6 és újabb), kivéve az alapértelmezett kódolástUtf8
.Export-Csv -Append
megfelel a meglévő kódolásnak, ha a célfájl AJ-t tartalmaz. A BOM hiányában kódolást használUtf8
.Start-Transcript -Append
megfelel a BOM-t tartalmazó fájlok meglévő kódolásának. A BOM hiányában alapértelmezés szerint kódolásra van bekapcsolvaAscii
. Ez a kódolás adatvesztést vagy karaktersérülést okozhat, ha az átiratban szereplő adatok többbájtos karaktereket tartalmaznak.
A sztringadatokat BOM hiányában olvasó parancsmagok esetén:
Get-Content
ésImport-PowerShellDataFile
az ANSI-kódolástDefault
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ételezzük, hogyUtf8
nincs anyagjegyzék.
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
: UTF-32 formátumban kódolja a big-endian bájtsorrendet.oem
: Az MS-DOS és a konzolprogramok alapértelmezett kódolását használja.unicode
: UTF-16 formátumban kódolja a kis végű bájtsorrendet.utf7
: UTF-7 formátumban kódol.utf8
: UTF-8 formátumban kódol (nem BOM).utf8BOM
: UTF-8 formátumban kódol byte order mark (BOM)utf8NoBOM
: UTF-8 formátumban kódol byte order mark (BOM) nélkülutf32
: UTF-32 formátumban kódolja a kis végű bájtsorrendet.
A PowerShell alapértelmezés szerint az utf8NoBOM
összes kimenetre vonatkozóan jelenik meg.
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
Kódolás 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ó: 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 beállítási változó használatával, ahogyan az ebben a $PSDefaultParameterValues
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 a Kódolás paramétert tartalmazó parancsmagok esetében.
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Fontos
Ha ezt a parancsot a PowerShell-profilban helyezi el, az a munkamenet-globális beállítás, amely minden olyan parancsot és szkriptet érint, amely nem határoz meg explicit módon kódolást.
Hasonlóképpen, olyan parancsokat is be kell foglalnia a szkriptekbe vagy modulokba, amelyeket ugyanúgy szeretne viselkedni. 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
hatással van arra a kódolásra, amelyet a PowerShell használ a külső programokkal való kommunikációhoz. 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.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: