Trong PowerShell, đầu ra mặc định khi ghi vào tệp thông qua các lệnh hoặc lệnh chuyển hướng như >
hoặc Out-File
thường sử dụng mã hóa UTF-16, điều này có thể gây khó khăn nếu bạn muốn sử dụng UTF-8. Dưới đây là cách để thay đổi mã hóa mặc định sang UTF-8.
1. Sử dụng $PSDefaultParameterValues
Để đặt mã hóa mặc định cho các lệnh như Out-File
, bạn có thể sử dụng biến $PSDefaultParameterValues
. Điều này sẽ giúp bạn không cần chỉ định mã hóa mỗi khi sử dụng Out-File
:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
Nếu bạn muốn áp dụng điều này cho tất cả các cmdlet hỗ trợ tham số -Encoding
như Set-Content
hoặc Add-Content
, bạn có thể thiết lập mã hóa mặc định cho tất cả các lệnh:
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Lưu ý:
- Trong Windows PowerShell (phiên bản cũ, dành riêng cho Windows), thiết lập này sẽ tạo tệp UTF-8 có BOM.
- Trong PowerShell 7 (phiên bản đa nền tảng), mã hóa UTF-8 không có BOM là mặc định.
2. Đặt trong profile PowerShell
Bạn có thể thêm các dòng mã trên vào tệp profile PowerShell của mình để thiết lập này có hiệu lực mỗi khi bạn mở PowerShell.
- Mở tệp profile bằng lệnh:
notepad $PROFILE
- Thêm dòng lệnh
$PSDefaultParameterValues
vào tệp, sau đó lưu lại.
3. Thay đổi mã hóa đầu ra tạm thời
Nếu bạn chỉ muốn thay đổi mã hóa cho một lệnh duy nhất, bạn có thể sử dụng Out-File
với tùy chọn -Encoding
như sau:
"nội dung" | Out-File -FilePath "tệp.txt" -Encoding utf8
4. Sử dụng trong tập lệnh
Nếu bạn đang viết một tập lệnh PowerShell và muốn đảm bảo rằng tất cả các đầu ra được ghi bằng mã hóa UTF-8, bạn có thể thêm tùy chọn -Encoding utf8
cho từng lệnh ghi tệp, hoặc sử dụng $PSDefaultParameterValues
như đã nêu ở trên.
Với 4 cách trên thì bạn có thể đảm bảo rằng PowerShell sử dụng mã hóa UTF-8 cho đầu ra của mình. Hy vọng chia sẻ này sẽ giúp ích bạn khi dùng PowerShell.