Trong quá trình làm việc với PowerShell, đôi khi chúng ta cần hiển thị đường dẫn đầy đủ của các tệp chứa các ký tự từ các ngôn ngữ khác nhau như tiếng Ả Rập, tiếng Trung, tiếng Nhật và tiếng Nga. Tuy nhiên, khi thực thi lệnh, kết quả trả về thường là các ký tự không rõ ràng, thay thế bởi các dấu “?” thay vì các ký tự chính xác.
Ví dụ lệnh được thực hiện là:
(Get-ChildItem -Recurse -Path "D:\test" -Include *unicode* | Get-ChildItem -Recurse).FullName
Kết quả đầu ra là các ký tự không thể đọc được như hình minh họa.
Vấn đề với Windows Console
Đây là vấn đề thường gặp với hệ thống Windows Console Subsystem, vốn không hỗ trợ đầy đủ Unicode. Khi sử dụng các ngôn ngữ có ký tự đặc biệt như tiếng Ả Rập, tiếng Trung, hoặc tiếng Nhật, việc hiển thị chính xác trở nên khó khăn hơn.
Giải pháp: Sử dụng Windows Terminal
Một trong những giải pháp tốt nhất hiện nay là sử dụng Windows Terminal, được phân phối và cập nhật qua Microsoft Store trên Windows 10 và Windows 11. Terminal này hỗ trợ Unicode tốt hơn nhiều so với console truyền thống (conhost.exe).
Các bước thực hiện:
- Chọn font hỗ trợ Unicode: Đầu tiên, hãy chọn một font TrueType hỗ trợ đầy đủ các ngôn ngữ cần thiết. Ví dụ, để hỗ trợ các ký tự tiếng Ả Rập, Trung Quốc, Nhật Bản và Nga, bạn có thể sử dụng font SimSun-ExtB có sẵn trên Windows 10.
- Chuyển mã hóa console sang UTF-8: Để làm cho PowerShell nhận dạng và xử lý Unicode đúng cách, bạn cần chuyển mã hóa console sang UTF-8. Bạn có thể thực hiện điều này bằng cách sử dụng lệnh:
$OutputEncoding = [Console]::InputEncoding = [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding
Lệnh này đảm bảo rằng PowerShell sử dụng mã hóa UTF-8 để giao tiếp với các chương trình bên ngoài. - Lưu cấu hình mã hóa: Để duy trì cấu hình này cho các phiên làm việc PowerShell sau, bạn có thể thêm lệnh trên vào tệp cấu hình
$PROFILE
của PowerShell. Điều này giúp bạn không phải cấu hình lại mỗi khi mở PowerShell. - Sử dụng Windows Terminal: Nếu bạn đang sử dụng Windows 11, phiên bản 22H2, Windows Terminal đã trở thành console mặc định. Nó cung cấp hỗ trợ tốt hơn cho các ký tự Unicode, giúp hiển thị chính xác các ký tự đặc biệt từ nhiều ngôn ngữ khác nhau.
Một số vấn đề khác cần lưu ý:
- Khi giao tiếp với các chương trình bên ngoài, đặc biệt là những chương trình yêu cầu mã hóa UTF-8, việc sử dụng cấu hình mã hóa đúng là rất quan trọng. Các công cụ như Node.js hay Python thường hỗ trợ UTF-8 tốt nếu được cấu hình đúng cách.
- Một số chương trình cũ có thể không hỗ trợ mã hóa UTF-8, dẫn đến việc hiển thị không chính xác. Trong trường hợp này, bạn có thể tạm thời chuyển mã hóa console sang UTF-8 khi gọi chương trình đó, rồi sau đó khôi phục lại cấu hình cũ.
Bằng cách thực hiện các bước trên, bạn có thể đảm bảo rằng các ký tự Unicode sẽ được hiển thị đúng trong PowerShell, giúp việc làm việc với các tệp tin có tên chứa các ký tự đặc biệt trở nên dễ dàng hơn.