文字コード変換の実験です。
Shift_JISのテキストファイルを読み込んでUTF8の文字列としてコンソールに出力
[System.Text.Encoding]::RegisterProvider([System.Text.CodePagesEncodingProvider]::Instance)
$utf8enc = [System.Text.Encoding]::UTF8
$sjisenc = [System.Text.Encoding]::GetEncoding("Shift_JIS")
$sjisbin = [System.IO.File]::ReadAllBytes("h:\ddd.txt")
$utf8bin = [System.Text.Encoding]::Convert($sjisenc, $utf8enc, $sjisbin)
$utf8str = $utf8enc.GetString($utf8bin)
echo $utf8str
UTF8の文字列をShit_JISに変換しテキストファイルとして保存
$utf8str = "あいうえお"
[System.Text.Encoding]::RegisterProvider([System.Text.CodePagesEncodingProvider]::Instance)
$utf8enc = [System.Text.Encoding]::UTF8
$sjisenc = [System.Text.Encoding]::GetEncoding("Shift_JIS")
$utf8bin = $utf8enc.GetBytes($utf8str)
$sjisbin = [System.Text.Encoding]::Convert($utf8enc, $sjisenc, $utf8bin)
[System.IO.File]::WriteAllBytes("h:\ddd.txt", $sjisbin);
PowerShellにおける文字コードに扱いに対する理解が足りていない状態で、いつも文字化けを発生させては試行錯誤を繰り返している状態です。
今回は文字列をバイト配列として扱い、System.Text.EncodingのConvertで文字コードを変換しています。
ここまですれば、思った通りの文字コードに変換してくれるようですが、文字コード変換はスクリプトではなく外部コマンド(nkf)を使ったほうが面倒が少ない感じがします。
コメント