簡體   English   中英

PowerShell 中的 UTF8 腳本輸出不正確的字符

[英]UTF8 Script in PowerShell outputs incorrect characters

我已經使用非 ascii 字符為 PowerShell 創建了一個 UTF8 腳本。

字符.ps1:

Write-Host "ç â ã á à"

當腳本在 PowerShell 控制台中運行時,它輸出錯誤的字符。

在此處輸入圖片說明

但是,如果我直接在控制台中寫入字符,它們會按預期顯示:

在此處輸入圖片說明

有誰知道是什么導致了這種行為?

問題來自我編寫的腳本,該腳本具有包含非 ascii 字符的硬編碼路徑。 當我嘗試將路徑作為參數傳遞給 cmdlet 時(在我要 robocopy 文件夾的情況下),命令失敗,因為它找不到路徑(在屏幕中錯誤輸出)。

使用 BOM 將腳本的編碼更改為 UTF-8 解決了該問題。

我使用帶有 EncodingHelper 插件的 SublimeText 來控制腳本的字符集。 它已正確設置為 UTF8。

我將 SublimeText 中腳本的編碼更改為“帶有 BOM 的 UTF-8”,並且輸出顯示正確。

我使用 Notepad++ 創建了相同的腳本,默認為“帶有 BOM 的 UTF-8”,並且該字符串在控制台中正確顯示。

我將 Notepad++ 中腳本的編碼更改為“無 BOM 的 UTF-8”,但顯示不正確。

PowerShell 似乎無法正確猜測沒有 BOM 的 UTF-8 文件的編碼。

在我的情況下,問題是由使用 Visual Studio Code 創建一個新的 PowerShell 腳本引起的,該腳本具有 UTF-8 的默認編碼,沒有 BOM。 將編碼設置為“Windows 1252”解決了問題。

PowerShell 似乎無法在沒有 BOM 的情況下處理 UTF-8,它需要“Windows 1252”或“帶有 BOM 的 UTF8”編碼。

有一種可靠的方法來檢測 utf8nobom ( https://unicodebook.readthedocs.io/guess_encoding.html )。 像許多其他小東西一樣,這似乎在 PS 6 中效果更好。即使是我心愛的 emacs 25 for windows 編碼也是錯誤的。

PS C:\users\admin> pwsh
PowerShell 6.1.0
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/pscore6-docs
Type 'help' to get help.

PS C:\users\admin> "write-host 'ç â ã á à'" | set-content -Encoding utf8NoBOM accent.ps1
PS C:\users\admin> .\accent
ç â ã á à

在調用你的腳本之前試試這個:

 $OutputEncoding = [Console]::OutputEncoding

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM