PowerShellがgit logとdiffを出力したときに発生したハングルエラーを解決


PowerShellはgitログまたはgit diffを出力する際に、符号化の問題でブレークすることがあります.この問題の解決方法について説明します.

TL;DR


Git設定を変更するか、PowerShell設定を変更します.どちらも直せる.
方法Git設定の変更
Gitの出力設定を変更します.このメソッドはGitの設定のみを変更するので、Gitの問題のみを解決します.PowerShellは影響を受けず、同じ問題が他のプログラムにも発生した場合は修復されません.
git config --global core.pager 'less --raw-control-chars'
方法PowerShell設定の変更
PowerShellで環境変数を設定します.これはPowerShellウィンドウでのみ一時的に問題を解決します.
$env:LC_ALL='C.UTF-8'
PowerShellを開くと自動的に実行されるスクリプトで、環境変数を設定した内容を記録します.新しいPowerShellウィンドウを開くたびに、PowerShellウィンドウに環境変数を設定し、問題を永続的に解決します.
Set-ExecutionPolicy unrestricted
if(!(Test-Path -path $profile)){ New-Item -Type File -Path $profile -Force }
Add-Content -Path $profile -Value '$env:LC_ALL=''C.UTF-8'''

エラーの説明


PowerShellでgitログを出力すると、次のことが起こります.
この記事では、これらの問題を解決する方法について説明します.

どうして起こるの?


GitとPowerShellの符号化フォーマットは互換性がありません.

解決策Git設定の変更


1つ目の方法はGitの出力フォーマットを変更することです.
この方法の利点は,Gitの設定のみを変更し,PowerShellに触れないことである.
PowerShellは次のコマンドを使用してgitの出力設定を変更します.
git config --global core.pager 'less --raw-control-chars'

この設定を無効にするには、次の手順に従います.
git config --global --unset core.pager

解決策PowerShell設定の変更


2つ目の方法はPowerShellのエンコード方式を変更することです.
PowerShellの設定を変更する方法で、PowerShellが使用する他のプログラムに影響を与える可能性があります.

PowerShellウィンドウでの一時的な変更のみ


PowerShellでは、環境変数$env:LC_ALL'C.UTF-8'に設定できます.
注意事項
この方法はPowerShellウィンドウでのみ有効です.新しいウィンドウで、問題が再び発生します.
次のコマンドを入力して環境変数を設定します.
$env:LC_ALL='C.UTF-8'

PowerShellを起動するたびに、自動的に実行されるスクリプトが作成され、変更されます。


PowerShellを開くたびに自動的に実行されるスクリプトを作成し、$env:LC_ALL環境変数を設定する内容を入力すると、環境変数を個別に設定するたびに自動的に問題を解決できます.
ただし、PowerShellで外部スクリプトを実行するには、実行ポリシーの制限を解除する必要があります.まず、次のコマンドを使用して、実行ポリシーの制限を解除します.
Set-ExecutionPolicy unrestricted
PowerShellを開くたびに自動的に実行されるスクリプトパスは、$profile変数に格納されます.パスにスクリプトがない場合は、次のコマンドラインを使用して新しいスクリプトを作成します.次に、作成したスクリプトファイルに$env:LC_ALL='C.UTF-8'を追加します.これにより、後でPowerShellを再起動するたびにこのスクリプトを実行して、環境変数を設定できます.
if(!(Test-Path -path $profile)){ New-Item -Type File -Path $profile -Force }
Add-Content -Path $profile -Value '$env:LC_ALL=''C.UTF-8'''

Reference


https://stackoverflow.com/questions/41139067/git-log-output-encoding-issues-on-windows-10-command-prompt