非ASCII文字を使用してPowerShell用のUTF8スクリプトを作成しました。
characters.ps1:
Write-Host "ç â ã á à"
PowerShellコンソールでスクリプトを実行すると、間違った文字が出力されます。
ただし、コンソールで文字を直接書き込むと、期待どおりに表示されます。
誰がその行動の原因を知っていますか?
この問題は、非ASCII文字を含むパスをハードコーディングした筆者が書いたスクリプトから発生しました。パスをコマンドレットに引数として渡そうとすると(フォルダーをロボコピーする場合)、パスを見つけることができないため、コマンドが失敗します(画面に誤って出力されます)。
BOMを使用してスクリプトのエンコーディングをUTF-8に変更することで問題が解決しました。
SublimeTextをEncodingHelperプラグインとともに使用して、スクリプトの文字セットを制御していました。 UTF8に正しく設定されました。
SublimeTextのスクリプトのエンコーディングを「UTF-8 with BOM」に変更すると、出力が正しく表示されました。
Notepad ++で同じスクリプトを作成しました。デフォルトでは「UTF-8 with BOM」であり、コンソールに文字列が正しく表示されました。
Notepad ++のスクリプトのエンコーディングを「BOMなしのUTF-8」に変更すると、正しく表示されませんでした。
PowerShellはBOMなしのUTF-8ファイルのエンコードを正しく推測できないようです
私の場合、問題は、UTF-8のデフォルトエンコーディングを持つVisual Studio Codeで新しいPowerShellスクリプトを作成したことが原因でした。エンコーディングを「Windows 1252」に設定すると、問題が解決しました。
PowerShellはUTF-8を処理できないようです。「Windows 1252」エンコーディングが必要です。
Utf8nobomを検出する信頼できる方法があります( https://unicodebook.readthedocs.io/guess_encoding.html )。他の多くのささいなことと同様に、これはPS 6でうまく機能するようです。
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
ç â ã á à