【告知】HTTP Requestがテキストをデコードする方法

Go down

【告知】HTTP Requestがテキストをデコードする方法

投稿 by miyako on 2017-02-23, 12:18 pm

HTTP GetおよびHTTP Requestは,『受け取り』変数の型に合わせてレスポンスデータを自動的に変換します。扱うことができるのは,以下のデータ型です。

テキスト
ピクチャ
オブジェクト
BLOB(無変換)

http://doc.4d.com/4Dv15/4D/15.4/HTTP-Get.301-3274754.ja.html
http://doc.4d.com/4Dv15/4D/15.4/HTTP-Request.301-3274755.ja.html

テキスト型は,Webページ(HTML, JS, CSS)を取り込む場合,またWebサービスのAPIにアクセスしてCSV・XML・JSONなどのデータを受け取る場合に有用です。

自動変換は便利ですが,BLOB(無変換)を自分で処理するのとは違い,エンコーディングを明示的に指定することはできないので,変換に失敗し,空の文字列や『化けた』テキストが返されるリスクも負っています。

HTTP GetおよびHTTP Requestがレスポンスをテキスト型に変換する仕組みは下記のとおりです。

1

Content-Typeヘッダーにcharset属性があれば,それを使用する

2

1でエンコーディングが特定できなかった場合,レスポンスボディのBOM(バイトオーダーマーク)に基づき,Unicodeあるいはロケールの非Unicodeを使用する

3

2でエンコーディングが特定できなかった場合,レスポンスボディ内のmetaタグのhttp-equivにcharset属性(Content-Type=HTML)または宣言のencoding(Content-Type=XML)があれば,それを使用する

これは15.3.HF1以降の振る舞いです。

以前は,

1

Content-Typeヘッダーにcharset属性があれば,それを使用する

2

UTF-8であるとみなす

でした。

15.4以降にアップグレードした後,HTTPレスポンスが化けたり,空になったりするようであれば,サーバーから返されるContent-Typeヘッダーにcharset属性がない,あるいはBOMがないために,新しい2のステップで非Unicodeのエンコーディングが選択されている可能性があります。

もし,レスポンスがUTF-8である(あるいはShift_JISである)ということが事前に分かっているのであれば,自動判定に頼るよりも,まずはBLOBで受け取って自分で変換したほうが無難でしょう。

miyako

投稿数 : 258
登録日 : 2016/07/05

トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可