windows powershellの文字コードをUTF-8にする
環境:Windows PowerShell 5.1
powershellの文字コードは、標準ではshift JISになっている。
chcpコマンドを使えばUTF-8にできるが、chcp 65001では毎回入力しないといけないため、非常に面倒。
https://zenn.dev/seasawher/articles/2332abfcbefbc5
を参考に、
$PROFILEに文字コードをUTF-8にするスクリプトを入力してみる。
code:a.bash
# PROFILEが存在するか確認
Test-Path $PROFILE
# PROFILEを作成
New-Item -ItemType File -Path $PROFILE -Force | Out-Null
# 好みのエディタで開く
notepad $PROFILE
# 以下を記述する
$OutputEncoding = console::InputEncoding = console::OutputEncoding = New-Object System.Text.UTF8Encoding
# 更新
. $PROFILE
起動すると、以下の表示が。
code:起動
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows
. : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\to\WindowsPowerShell\Microso
ft.PowerShell_profile.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft
.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:3
+ . 'C:\Users\to\WindowsPowerShell\Microsoft.PowerShell_pr ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
https://go.microsoft.com/fwlink/?LinkID=135170
セキュリティの設定を変えないとファイルは実行されませんとのこと。
セキュリティの設定を変えるのはいやなので別の策を考える。
設定を変えた。
code:a.shell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
どうやら、Windows PowerShell 5.1は開発が終了しており、未来永劫文字コードはshift JISだが、最新版のWindows PowerShell 5.1では文字コードがUTF-8らしい?
https://www.reddit.com/r/PowerShell/comments/1cgz4na/seeking_opinions_sticking_with_powershell_51_vs/?tl=ja
注意点として、Windows PowerShell 5.1は.NET Frameworkが使われていて、Windows PowerShell 7は.NET Coreが使われているため、一部動作が異なるようです。
参考:https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.5
PowerShell 7を導入してみたけど、うまいこといかなかったんですが…
https://qtamaki.hatenablog.com/entry/2021/04/05/101410
これをしたら、VScode以外ならうまく動作するように。
VScodeのターミナルもそこそこ使うので、やっぱり$PROFILEを記述する方法で行くことにします。
Remove-Item -Path $PROFILE