はじめに
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で保存されている関係上文字化けしたりと、いろいろ文字化け問題に悩まされますが、一つ一つ解決していく必要がありますね。