記事
· 2025年4月1日 1m read

IRISから外部のWebAPIを呼び出したとき、レスポンス内の全角文字が化ける

これは InterSystems FAQ サイトの記事です。

Content-Typeにcharset 情報が含まれていない場合、IRIS/Cachéは文字コードを判断できず文字コード変換が行われません。

 

そこで、以下のように、「自動的な文字変換を行わず、UTF-8に変換する処理を記述」することで、その指定がある無しに関わらず、対応することができます。

 

 // requestオブジェクトは以下のように生成 
 // 詳細処理は省略
 // set request=##class(%Net.HttpRequest).%New()
 // リクエスト時に、文字変換を行わないように指定
 set request.ReadRawMode=1
 do 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)1
続けるにはログインするか新規登録を行ってください