日本語を含むShift-JISのファイルを読んでコンソールに出力 powershell7

2024年9月15日

新しいバージョンのパワーシェル は UTF 8 で読み込むので日本語で扱うには難しいです

バッチファイル

Shift-JISでバッチファイルを保存してください

echo e %*

::
@pwsh -NoProfile -Command  "& (Invoke-Expression -Command ('{' + (Get-Content %~f0 -Encoding Shift-JIS | Where-Object {$_.readcount -gt 9}| Out-String )+ '}'))" %*
::powershell -Command  "& (Invoke-Expression -Command ('{' + (Get-Content %~f0 | Where-Object {$_.readcount -gt 9}| Out-String )+ '}'))" %*
timeout /t 5&goto:eof



$PSVersionTable.PSVersion
$s = "らりるれろEncoding  "
[Console]::OutputEncoding 
$OutputEncoding 
Write-Host $s
Start-Sleep -s 30
chcp 65001
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8')
$OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8')
[Console]::OutputEncoding 
$OutputEncoding 
Write-Host $s
$s2 = [System.Text.Encoding]::GetEncoding('utf-8').GetString([System.Text.Encoding]::GetEncoding('utf-8').GetBytes($s))
Write-Host $s2
$s |Select-String -Pattern '.' -Encoding UTF8 |  Write-Host
$s |Select-String -Pattern '.' -Encoding Shift-JIS   |  Write-Host
Start-Sleep -s 30
chcp 932
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
#	$PSDefaultParameterValues['*:Encoding'] = 'shift-jis'
OutputEncoding = [System.Text.Encoding]::GetEncoding('shift-jis')
[Console]::OutputEncoding 
$OutputEncoding 
Write-Host $s
Start-Sleep -s 30

結果を見ると読み込む文字コードを正しく指定してあげればコンソール出力は自動で適正なものにやってくれるみたいです

内部的には UTF 8 で管理されてるようです

新しいパワーシェルでも初期はデフォルトはコンソールはshift_jisです



Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      4      5

[Console]::OutputEncoding 

EncodingName      : Japanese (Shift-JIS)
WebName           : shift_jis
HeaderName        : iso-2022-jp
BodyName          : iso-2022-jp
Preamble          :
WindowsCodePage   :
IsBrowserDisplay  :
IsBrowserSave     :
IsMailNewsDisplay :
IsMailNewsSave    :
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 932

$OutputEncoding 

Preamble          :
BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001

bat,PowerShell ,windows

Posted by eightban