HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0728
さくま」http通信によるエンコードについて4解決


さくま」

リンク

2010/7/28(Wed) 21:19:19|NO.34066

私は今かんたんなhttp通信について学んでいるのですが
それをHSPでやろうとおもいスクリプトを組んでみたんですが
エンコードがうまくいってないようなんですが
どういううことなんでしょうか?
もしかしたらこれで上手くいているんでしょうか?
ためしにHSP.TVに通信してHTML形式で保存するスクリプトを組んでみました


screen 0,600,600 #include"encode.as" #include "pcbnet2.as" dataA=5:dataB=10;データの定義 tcpopen socket,"hsp.tv",80//hsp.tvに接続 repeat tcpiscon socket if stat=1:mes "接続しました":break if stat=2:dialog "接続に失敗":end await 10 loop command="GET /index2.html HTTP/1.1\n"//indexファイルを要求 command+="Host: hsp.tv\n"//ホスト名 command+="\n\n" tcpput command,socket//送信 wait 100 tcpcount datasize,socket;受信したサイズを調べる sdim data,datasize;領域の確保 mes ""+datasize+"バイト受信" tcpget data,datasize,socket//受信 notesel data mes eucjp2sjis(data)//EUCコードをSJISコードに変換 //応答メッセージのレスポンスとヘッダを消去 repeat 9 notedel 0 loop notesave "data.html"



この記事に返信する


inovia

リンク

2010/7/28(Wed) 21:59:40|NO.34068

もしかして↑と表示されている部分のことですか?
文字コードはEUCからシフトJISになっていますが、改行コードがLFのままになっています。
Windows で標準的に取り扱うのは CR+LF 形式ですので 変換すれば消えるはずです。

文字列中の改行コードを判別、変換、削除
http://lldev.jp/hsp/module/crlf.html

ちなみに、保存したデータがEUCのままのなのはここが原因。

mes eucjp2sjis(data)//EUCコードをSJISコードに変換


data=eucjp2sjis(data)//EUCコードをSJISコードに変換 mes data



さくま」

リンク

2010/7/28(Wed) 22:55:01|NO.34069

あ〜
なるほど、私が気になっていたのは改行コードのことについてです
ちなみにHTMLがおかしくなっていたのに気づいていなかったのは
たぶんわたしのブラウザではEUCコードとして読み取っていたんだと思います
メモ帳で開いたらおかしいことがわかりました
それで改行コードについてなんですが変換がどうしてもうまくいきません
というか↑が消えないんです
一応コード的に間違っている部分は見つからないんですが

screen 0,600,600 #include"encode.as" #include "pcbnet2.as" dataA=5:dataB=10;データの定義 tcpopen socket,"hsp.tv",80//hsp.tvに接続 repeat tcpiscon socket if stat=1:mes "接続しました":break if stat=2:dialog "接続に失敗":end await 10 loop command="GET /index2.html HTTP/1.1\n"//indexファイルを要求 command+="Host: hsp.tv\n"//ホスト名 command+="\n\n" tcpput command,socket//送信 wait 100 tcpcount datasize,socket;受信したサイズを調べる sdim data,datasize;領域の確保 mes ""+datasize+"バイト受信" tcpget data,datasize,socket//受信 notesel data a=12 a=id_crlf(data)//現在の改行こーどの種類を検索 mes a conv_crlf data,TYPE_CRLF//改行コードを変換 data=eucjp2sjis(data) mes data//EUCコードをSJISコードに変換 //応答メッセージのレスポンスとヘッダを消去 repeat 9 notedel 0 loop notesave "data.html" /* #defcfunc id_crlf var buf_to_id 機能: 文字列中の改行コード形式を判別(最初に見つけたものを返す) 引数: buf_to_id 処理対象文字列 戻り値: 0(TYPE_CRLF) 1(TYPE_CR) 2(TYPE_LF) -1(TYPE_NO_CRLF=改行コードが見つからなかった) #deffunc conv_crlf var buf_to_conv, int conv_type 機能: 文字列中の改行コードを別形式に変換 引数: buf_to_conv 処理対象文字列 conv_type 変換後形式( 0(TYPE_CRLF) 1(TYPE_CR) 2(TYPE_LF) から選択して指定) */ < /pre>



inovia

リンク

2010/7/29(Thu) 00:27:39|NO.34070

原因としては、改行コード CR+LF と LF が混在してしまっています。
HTTPのレスポンスヘッダがCR+LFで取り扱っていますが、中身の方がLFになっています。
先ほど提示したモジュールは一番最初に見つけた改行コードで判定するので、
変換に失敗している感じ。

解決策としては、最初にHTTPのレスポンスヘッダを除去してしまうことです。
notesel の次の行あたりに、除去するルーチンを組み込んでください。
(上のスクリだと、repeat 9 〜 notedel 0 〜 loop)



さくま」

リンク

2010/7/29(Thu) 15:08:04|NO.34072

なるほど
おっしゃったとおりレスポンスとヘッダを消してみるとうまくいきました
ありがとうございました



ONION software Copyright 1997-2023(c) All rights reserved.