[Powershell] Invoke-RestMethodのPOSTデータに日本語が含まれている場合に文字化けするのを解消する

はじめに

Invoke-RestMethodを利用して日本語を含むJSONデータをPOSTリクエストしてデータを登録する際に、POST先の登録データが文字化けしました。

今回は、PowerShellのInvoke-RestMethodを利用して日本語を含むJSONデータをPOSTする際に文字化けしない方法の備忘録となります。

byte配列に変換する

最初にheaderのContent-Typeをutf-8に設定して試してみましたが、うまくいかず・・・

そこで、byte配列に変換してJSONデータをポストすると、登録先で文字化けせずに登録されました。

$json = @{Name="日本語"; Age=20}
$body = $json | ConvertTo-Json
$body = [Text.Encoding]::UTF8.GetBytes($body)

$headers = New-Object "System.Collections.Generic.Dictionary([String],[String])"
$headers.Add('Accept','application/json')
$headers.Add('Content-Type','application/json')

$url = http://localhost/api/post
Invoke-RestMethod -Headers $headers -Method "POST" -Uri $url -Body $body

上記のGetBytesメソッドにてJSONデータをbyte配列にしています。

こうすることで文字化けを回避することができます。

最後に

Powershellの実行結果では日本語で処理されているように見えますが、実際POST先では文字化けしているなど、結構文字コード問題は多く存在します。

Powershellの標準出力で出力する場合、UTF8 BOMありで保存されていれば、文字化けしないのに、VSCodeでは UTF8で保存されている関係上文字化けしたりと、いろいろ文字化け問題に悩まされますが、一つ一つ解決していく必要がありますね。

タイトルとURLをコピーしました