about_Character_Encoding
Deskripsi singkat
Menjelaskan cara PowerShell menggunakan pengodean karakter untuk input dan output data string.
Deskripsi panjang
Unicode adalah standar pengodean karakter di seluruh dunia. Sistem ini menggunakan Unicode secara eksklusif untuk manipulasi karakter dan string. Untuk deskripsi terperinci tentang semua aspek Unicode, lihat The Unicode Standard.
Windows mendukung set karakter Unicode dan tradisional. Kumpulan karakter tradisional, seperti halaman kode Windows, gunakan nilai 8-bit atau kombinasi nilai 8-bit untuk mewakili karakter yang digunakan dalam pengaturan bahasa atau wilayah geografis tertentu.
PowerShell menggunakan karakter Unicode yang ditetapkan secara default. Namun, beberapa cmdlet memiliki parameter Pengodean yang dapat menentukan pengodean untuk set karakter yang berbeda. Parameter ini memungkinkan Anda memilih pengodean karakter tertentu yang Anda butuhkan untuk interoperabilitas dengan sistem dan aplikasi lain.
Cmdlet berikut memiliki parameter Pengodean :
- 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
Tanda urutan byte
Tanda urutan byte (BOM) adalah tanda tangan Unicode dalam beberapa byte pertama dari file atau aliran teks yang menunjukkan pengodean Unicode mana yang digunakan untuk data. Untuk informasi selengkapnya, lihat dokumentasi tanda urutan Byte.
Di Windows PowerShell, pengodean Unicode apa pun, kecuali UTF7
, selalu membuat BOM. PowerShell (v6 dan lebih tinggi) default ke utf8NoBOM
untuk semua output teks.
Untuk kompatibilitas keseluruhan terbaik, hindari menggunakan BOM dalam file UTF-8. Platform Unix dan utilitas warisan Unix juga digunakan pada Platform Windows tidak mendukung BOM.
Demikian pula, UTF7
pengodean harus dihindari. UTF-7 bukan pengodean Unicode standar dan ditulis tanpa BOM di semua versi PowerShell.
Membuat skrip PowerShell pada platform seperti Unix atau menggunakan editor lintas platform di Windows, seperti Visual Studio Code, menghasilkan file yang dikodekan menggunakan UTF8NoBOM
. File-file ini berfungsi dengan baik di PowerShell, tetapi mungkin rusak di Windows PowerShell jika file berisi karakter non-Ascii.
Jika Anda perlu menggunakan karakter non-Ascii dalam skrip Anda, simpan sebagai UTF-8 dengan BOM. Tanpa BOM, Windows PowerShell salah menafsirkan skrip Anda sebagai dikodekan dalam halaman kode "ANSI" warisan. Sebaliknya, file yang memiliki UTF-8 BOM dapat bermasalah pada platform seperti Unix. Banyak alat Unix seperti cat
, sed
, awk
, dan beberapa editor seperti gedit
tidak tahu cara memperlakukan BOM.
Pengodean karakter di Windows PowerShell
Di PowerShell 5.1, parameter Pengodean mendukung nilai berikut:
Ascii
Menggunakan set karakter Ascii (7-bit).BigEndianUnicode
Menggunakan UTF-16 dengan urutan byte big-endian.BigEndianUTF32
Menggunakan UTF-32 dengan urutan byte big-endian.Byte
Mengodekan sekumpulan karakter ke dalam urutan byte.Default
Menggunakan pengodean yang sesuai dengan halaman kode aktif sistem (biasanya ANSI).Oem
Menggunakan pengodean yang sesuai dengan halaman kode OEM sistem saat ini.String
Sama sepertiUnicode
.Unicode
Menggunakan UTF-16 dengan urutan byte little-endian.Unknown
Sama sepertiUnicode
.UTF32
Menggunakan UTF-32 dengan urutan byte little-endian.UTF7
Menggunakan UTF-7.UTF8
Menggunakan UTF-8 (dengan BOM).
Secara umum, Windows PowerShell menggunakan pengodean Unicode UTF-16LE secara default. Namun, pengodean default yang digunakan oleh cmdlet di Windows PowerShell tidak konsisten.
Catatan
Menggunakan pengodean Unicode apa pun, kecuali UTF7
, selalu membuat BOM.
Untuk cmdlet yang menulis output ke file:
Out-File
dan operator>
pengalihan dan>>
membuat UTF-16LE, yang terutama berbeda dariSet-Content
danAdd-Content
.New-ModuleManifest
danExport-CliXml
juga membuat file UTF-16LE.Ketika file target kosong atau tidak ada,
Set-Content
danAdd-Content
gunakanDefault
pengodean.Default
adalah pengodean yang ditentukan oleh halaman kode warisan ANSI lokal sistem aktif.Export-Csv
Ascii
membuat file tetapi menggunakan pengodean yang berbeda saat menggunakan parameter Tambahkan (lihat di bawah).Export-PSSession
membuat file UTF-8 dengan BOM secara default.New-Item -Type File -Value
membuat file UTF-8 tanpa BOM.Send-MailMessage
menggunakan pengodeanAscii
secara default.Start-Transcript
Utf8
membuat file dengan BOM. Ketika parameter Tambahkan digunakan, pengodean dapat berbeda (lihat di bawah).
Untuk perintah yang ditambahkan ke file yang sudah ada:
Out-File -Append
>>
dan operator pengalihan tidak mencoba mencocokkan pengodean konten file target yang ada. Sebaliknya, mereka menggunakan pengodean default kecuali parameter Pengodean digunakan. Anda harus menggunakan pengodean asli file saat menambahkan konten.Dengan tidak adanya parameter Pengodean eksplisit,
Add-Content
mendeteksi pengodean yang ada dan secara otomatis menerapkannya ke konten baru. Jika konten yang ada tidak memiliki BOM,Default
pengodean ANSI digunakan. PerilakunyaAdd-Content
sama di PowerShell (v6 dan lebih tinggi) kecuali pengodean defaultnya adalahUtf8
.Export-Csv -Append
cocok dengan pengodean yang ada saat file target berisi BOM. Dengan tidak adanya BOM, bom menggunakanUtf8
pengodean.Start-Transcript -Append
cocok dengan pengodean file yang ada yang menyertakan BOM. Dengan tidak adanya BOM, ini default untukAscii
pengodean. Pengodean ini dapat mengakibatkan kehilangan data atau kerusakan karakter ketika data dalam transkrip berisi karakter multibyte.
Untuk cmdlet yang membaca data string tanpa adanya BOM:
Get-Content
danImport-PowerShellDataFile
menggunakan pengodeanDefault
ANSI. ANSI juga merupakan apa yang digunakan mesin PowerShell saat membaca kode sumber dari file.Import-Csv
,Import-CliXml
, danSelect-String
mengasumsikanUtf8
dengan tidak adanya BOM.
Pengodean karakter di PowerShell
Di PowerShell (v7.1 dan yang lebih tinggi), parameter Pengodean mendukung nilai berikut:
ascii
: Menggunakan pengodean untuk set karakter ASCII (7-bit).ansi
: Menggunakan pengodean untuk halaman kode ANSI budaya saat ini. Opsi ini ditambahkan di PowerShell 7.4.bigendianunicode
: Mengodekan dalam format UTF-16 menggunakan urutan byte big-endian.bigendianutf32
: Mengodekan dalam format UTF-32 menggunakan urutan byte big-endian.oem
: Menggunakan pengodean default untuk MS-DOS dan program konsol.unicode
: Mengodekan dalam format UTF-16 menggunakan urutan byte little-endian.utf7
: Mengodekan dalam format UTF-7.utf8
: Mengodekan dalam format UTF-8 (tanpa BOM).utf8BOM
: Mengodekan dalam format UTF-8 dengan Byte Order Mark (BOM)utf8NoBOM
: Mengodekan dalam format UTF-8 tanpa Byte Order Mark (BOM)utf32
: Mengodekan dalam format UTF-32 menggunakan urutan byte little-endian.
PowerShell default ke utf8NoBOM
untuk semua output.
Dimulai dengan PowerShell 6.2, parameter Pengodean juga memungkinkan ID numerik halaman kode terdaftar (seperti -Encoding 1251
) atau nama string halaman kode terdaftar (seperti -Encoding "windows-1251"
). Untuk informasi selengkapnya, lihat dokumentasi .NET untuk Encoding.CodePage.
Dimulai dengan PowerShell 7.4, Anda dapat menggunakan Ansi
nilai untuk parameter Pengodean untuk meneruskan ID numerik untuk halaman kode ANSI budaya saat ini tanpa harus menentukannya secara manual.
Mengubah pengodean default
PowerShell memiliki dua variabel default yang dapat digunakan untuk mengubah perilaku pengodean default.
$PSDefaultParameterValues
$OutputEncoding
Untuk informasi selengkapnya, lihat about_Preference_Variables.
Dimulai di PowerShell 5.1, operator pengalihan (>
dan >>
) memanggil Out-File
cmdlet. Oleh karena itu, Anda dapat mengatur pengodean defaultnya menggunakan variabel preferensi seperti yang $PSDefaultParameterValues
ditunjukkan dalam contoh ini:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
Gunakan pernyataan berikut untuk mengubah pengodean default untuk semua cmdlet yang memiliki parameter Pengodean .
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Penting
Menempatkan perintah ini di profil PowerShell Anda membuat preferensi pengaturan sesi-global yang memengaruhi semua perintah dan skrip yang tidak secara eksplisit menentukan pengodean.
Demikian pula, Anda harus menyertakan perintah tersebut dalam skrip atau modul yang ingin Anda jaga dengan cara yang sama. Menggunakan perintah ini memastikan bahwa cmdlet berperilaku sama bahkan ketika dijalankan oleh pengguna lain, di komputer yang berbeda, atau di versi PowerShell yang berbeda.
Variabel $OutputEncoding
otomatis memengaruhi pengodean yang digunakan PowerShell untuk berkomunikasi dengan program eksternal. Ini tidak berpengaruh pada pengodean yang digunakan operator pengalihan output dan cmdlet PowerShell untuk menyimpan ke file.