20秒で終わるWindows日本語(utf-8)出力解決

2023/04/24に公開

文字化け解決法

コマンドプロンプト・PowerShellにてutf-8であるプログラムの出力が文字化ける際の解決策

コマンドプロンプト

chcp 65001

PowerShell

基本的にはコマンドプロンプトと同じ

chcp 65001

しかし、PowerShellのverによっては上記では解決しないことがある
そのときは次のコマンド

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8')

一時的な解決については以上

PowerShell プロファイル

上記のコマンドはそれを実行したインスタンスにのみ有効となる。
よって、PowerShellを開くたびに上記のコマンドを実行する必要がある。
それが面倒な場合はPowerShellのプロファイルに上記コマンドを記述することで、PowerShellを開いた際にそれらが自動的に実行される。

プロファイルのパス

$profile

上記コマンドで取得できる

プロファイルの作成

New-Item $profile -force type file

プロファイルの内容の変更

notepad $profile

上記コマンドを実行することでメモ帳が開く。
ここに記述したコマンドが実行時に自動的に適用される。
今回ならば、以下のコマンドを記述して保存する。

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8')

プロファイルの読み込みエラーが発生する場合


上記のようなエラーが出た場合は、PowerShellにスクリプトを実行する権限が与えられていないため、プロファイルが読み込まれていない。
そのため、PowerShellのスクリプト実行ポリシーを変更する必要がある。
以下はそれを行うための手順である。

1 PowerShellを管理者権限で実行する
2 PowerShellのスクリプト実行ポリシーを変更する

下記コマンドにて実行ポリシーを変更する

Set-ExecutionPolicy RemoteSigned
RemoteSignedについて

RemoteSignedはローカルで作成されたスクリプトの実行を許可するポリシー。
インターネットからダウンロードされたスクリプトの実行には署名が必要となる。
インターネット以外のリソースからの悪意あるスクリプトを実行する可能性がある。
したがって、変更は自己責任で。
詳しくはここ

3 スクリプト実行ポリシーの確認

Get-ExecutionPolicy

上記コマンドで現在の実行ポリシーが確認できる。
RemoteSignedになっていれば、PowerShellを再起動して完了。

参考:

https://nisland.hatenablog.com/entry/2021/05/08/160222
https://acoustic-groove2.hatenablog.com/entry/2017/12/06/013928

Discussion