HTTP リクエストを試して比較してみた


Get Object はユニコードに対応しているのか

謎ではあるがとりあえず Get Object で「 http://prester.org 」にアクセスしてみた。

サンプル:Get Object で http アクセス

サンプルを実行してみれば分かるが、英語の文字列がズンラーと並んでいる。英語の文字列というか、これは prester.org にアクセスしたときに表示されるページの HTML のソースコードだ。

ウェブ上のリソースは UTF-8 で書かれていて、文字エンコードも UTF-8 が指定されている。meta http-equiv=”content-type” content=”text/html; charset=utf-8″ とか書いてあるソース部分が確認できると思う。


ただし読み進めるとところどころ日本語が表示されるはずの部分が文字化けしていて読めないはず。つまり GET Object は UTF-8 の文字列を受け取ったけど、おそらく GET Object は受け取る際に変数へ格納する時に UTF-8 として扱っていないバッファに値を格納してると思われる、あるいはエンコーディングの処理になにか間違いがある。そうすると文字列のエンコーディングが一致しないため CF2.5 の PC 用アプリとして出力された文字列は日本語が化ける…と推測。

一方で GET オブジェクトも HTML5 エクスポータを介すと出力文字列が化けないのは、HTML5 が UTF-8 で適切に値を処理しているからだと思う。

実際ちょっと自分で作ってみた

この仮説を立ててから次に自分で HTTP リクエストに関する コンソールアプリを C で作ってみた。CF2.5 のエクステンションではまだない。

ウィンドウズのコンソールは OS のロケール設定に従って日本語環境では Shift-Jis で文字列が表示される。

そしてまず普通に HTTP リクエストするとやっぱり文字列は化けてる。原因ははっきりしていて、受け取った時の文字列は Char 型で確保された変数に格納した。これだと UTF-8 でサーバから受け取ったものをコンソールでは Shift-Jis で表示することになるから出力された文字列は化けるってわけだ。

というわけで、次にサーバから受け取った文字列をユニコード文字列に変換してから、Shift-Jis に変換しなおす処理を挟んでコンソールで HTTP リクエストの結果を表示させてみたら、これでちゃんと日本語が表示されるようになった。

動作の仕組みとか要領はだいたい分かったので、次にエクステとして組み込んだら日本語がちゃんと表示されるかどうかを試してみる。

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です