IRISから外部のWebAPIを呼び出したとき、レスポンス内の全角文字が化ける
これは InterSystems FAQ サイトの記事です。
Content-Typeにcharset 情報が含まれていない場合、IRIS/Cachéは文字コードを判断できず文字コード変換が行われません。
そこで、以下のように、「自動的な文字変換を行わず、UTF-8に変換する処理を記述」することで、その指定がある無しに関わらず、対応することができます。
// requestオブジェクトは以下のように生成 // 詳細処理は省略// set request=##class(%Net.HttpRequest).%New()// リクエスト時に、文字変換を行わないように指定set request.ReadRawMode=1do request.Send("POST",URL)
// 受取ったデータを、UTF-8に変換してから、JSON変換set response = request.HttpResponse.Data
set data = response.Read()
set data2 = $zcvt(data,"I","UTF8")
set response = {}.%FromJSON(data2)
write response.%ToJSON()長い文字列が想定される場合には、一度のReadで読み込めない可能性があるため、以下のようなコーディングを行う必要があります。
set stream=##class(%Stream.TmpCharacter).%New()
while 'response.AtEnd {
set data = response.Read()
set data2 = $zcvt(data,"I","UTF8")
do stream.Write(data2)
}
set res = {}.%FromJSON(stream)
write res.%ToJSON() ディスカッション (0)0