コマンドプロンプトなコマンドの入出力が文字化けする前提
PowerShellの出力エンコーディングをSJISへ変更するPS> Get-Date (1) 2020年5月6日 17:42:00 PS> Get-Date | clip.exe (2)
PS> $OutputEncoding = [Text.Encoding]::Default (1) PS> Get-Date | clip.exe
補足
PS> [Text.Encoding]::GetEncoding('sjis')
BodyName : iso-2022-jp
EncodingName : 日本語 (シフト JIS)
HeaderName : iso-2022-jp
WebName : shift_jis
WindowsCodePage : 932
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
IsSingleByte : False
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 932
PowerShellの入力エンコーディングを変更する PS> $OutputEncoding = [Text.Encoding]::GetEncoding('utf-8') (1)
PS> gc .\1.json -Encoding utf8 | jq.exe (2)
{ (3)
"a": "日本語",
"b": "英語"
}
PS> gc .\1.json | jq.exe | Select-String "日本語" (1)
(2)
PS> [Console]::OutputEncoding = [Text.Encoding]::UTF8 (3)
PS> gc .\1.json | jq.exe | Select-String "日本語" (4)
"a": "日本語", (5)
補足:なんでこんな問題が起きるのか
Bash呼び出しPS> bash.exe -c 'cat 1.json | jq "." | grep "日本語"' "a": "日本語", CMD呼び出しPS> cmd /c 'type 1.json | jq "." | jvgrep "日本語"' "a": "日本語", fzfを使うならこんな感じ、 PS> bash -c "find . | fzf" 参考 |
|