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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0810
inoviaIEコンポーネントでエンコードを指定して開くには8解決


inovia

リンク

2008/8/10(Sun) 00:48:36|NO.18024

IEコンポーネント(web.hsp)でエンコード(文字コード)
を強制的に指定して開くにはどうすればよいでしょうか?


enc = pDoc("charset")

文字コードの取得までは出来たのですが、その逆がどうしても思いつきません。
MSDNも見てみましたが、ごちゃごちゃしてよく分からず。

※今日から1週間ぐらい外出する為、返事が遅れてしまいます。
大変申し訳ないと思うのですが、よろしくお願いします。



この記事に返信する


flory

リンク

2008/8/10(Sun) 13:03:31|NO.18030

MSDNを見てみるとdefaultCharsetプロパティというものを発見。どうやらこれでできそうだと思いましたが、
>The IHTMLDocument2::put_defaultCharset method is not implemented; therefore, the property is read-only.
らしいです。残念。

というわけで、「エンコードを指定して開く」ではなく、「開いてからエンコードを指定する」ことになりますが、回答してみます。

charsetプロパティは直接設定することができます。ただし、これでは「設定しただけ」になりますから、ページを更新して反映させる必要があります。ページの更新(IEでF5キーを押したときの動作)は、IWebBrowser2インターフェースのRefreshメソッドを使えば可能です。
以上をサンプル(web.hsp)に沿って書くと、

pDoc("charset") = "UTF-8" ie->"Refresh"
みたいな感じです。pDocはIHTMLDocument2インターフェースを、ieはIWebBrowser2インターフェースを指しています。
注意すべき点は、charsetプロパティの設定はページが完全に読み込まれた(readyStateプロパティがcompleteになった)後でないとできないということです。サンプル(web.hsp)では*OnNavigateComplete2以下でIHTMLDocument2インターフェースを取得していますが、このときはまだ完全には読み込まれていません。charsetプロパティを設定するのは必ず*OnNavigateComplete2からreturnした後にしてください。(したがってdelcom命令を消す必要がありますね。)

参考:
IHTMLDocument2::defaultCharset Property
http://msdn.microsoft.com/en-us/library/aa752572.aspx
IHTMLDocument2::charset Property
http://msdn.microsoft.com/en-us/library/aa752566.aspx
IWebBrowser2::Refresh Method
http://msdn.microsoft.com/en-us/library/aa768258.aspx
IHTMLDocument2::readyState Property
http://msdn.microsoft.com/en-us/library/aa752602.aspx



inovia

リンク

2008/8/13(Wed) 17:07:02|NO.18149

floryさん回答どうもありがとう御座います。

repeat if ie("readyState")=1:{ pDoc("charset") = "utf-8" ie->"Refresh" delcom pDoc break }else{ wait 1 } loop
上のようにやってみたのですが、
Refreshすると元のエンコードに戻ってしまうようです。

実際のIE6で確認したところ、手動でエンコードを変更したあと、
更新ボタンを押すと設定が戻ってしまうことが分かりました。

やはり難しいのでしょうか?
うむむ。



inovia

リンク

2008/8/13(Wed) 20:23:17|NO.18159

自分で暫く考えてみたのですが、

ie->"Navigate" url,,,,"Content-Type: text/html; charset=utf-8\r\n"
で出来るのではないかと思いまして、実際に動かしてみると無視されてしまいます。
http://www.niseko.or.jp/BlogX2/permalink.aspx/62451d45-cf05-4676-8bb8-a116bd3e917b

Location: http://www.google.co.jp/
と変えてみても動かなかったことから、指定が間違っていると思うのですが
どうでしょうか?



ANTARES

リンク

2008/8/14(Thu) 01:21:10|NO.18169

>実際に動かしてみると無視されてしまいます。
 それはサーバに送るフォームデータに対する文字コード指定です。

 単なる思いつきですが、charsetプロパティを監視して、
変わったら、もう一度UTF-8にしてやるというのはどうでしょう?



inovia

リンク

2008/8/14(Thu) 22:12:24|NO.18257

ANTARESさんへ
返信どうもありがとう御座います。

ie->"Navigate" url,,,,"Content-Type: text/html; charset=utf-8\r\n"
これの第5引数が受信したHTTPヘッダを書き換えるものと勘違いしていました。
正しくは送信する時のHTTPヘッダの指定でした。

受信したHTTPヘッダの書き換えが出来たら
エンコードを変えなくても万事休す(使い方あってる?)なのですが。(^_^;)

>単なる思いつきですが、charsetプロパティを監視して、
>変わったら、もう一度UTF-8にしてやるというのはどうでしょう?

Refreshを実行した瞬間、文字コードが元に戻り変更された文字コード
をまた元に戻すという無限ループ状態になってしまいました。



ANTARES

リンク

2008/8/15(Fri) 19:51:06|NO.18302

>エンコードを変えなくても万事休す(使い方あってる?)なのですが。(^_^;)
 間違ってます。「万事休す」とは「策が尽きた」という意味です。
本題にレスできなくてごめんなさい。



inovia

リンク

2008/8/16(Sat) 00:05:16|NO.18327

ANTARESさんへ
返信どうもです。

書いてから辞書をひいてみたのですけど、
やっぱり「万事休す」の使い方間違ってました。(-_-;)

ところで、色々とやっているうちにエンコードの指定が出来てしまいました。


pDoc("Charset") ="utf-8" pDoc("defaultCharset") ="utf-8" ie->"Refresh2" 2
こうやるとエンコードがきちんと変わりました。
MSDNにも書いていない・・・不思議だ〜。

という訳で自己解決しました。(^_^;)
皆様本当にありがとう御座いました。



flory

リンク

2008/8/16(Sat) 14:31:10|NO.18341

NO.18030の方法では確かにうまくいかないことがありますね。HTMLのヘッダにcharset属性がきちんと記述されている場合、Refreshメソッドではそちらを優先するようです。
ろくに動作確認もせずに投稿してしまい、すいませんでした。


で。解決されたようですが、一応。

ie->"Refresh2" 2
ということは、Refresh2メソッドでREFRESH_COMPLETELYを指定するわけですか。これだとうまくいきますね。
ただ、

pDoc("defaultCharset") ="utf-8"
の方は不要かと思います。実際、これを抜いても動作しますし、defaultCharsetプロパティを確認しても変更された様子はありません。やはりMSDNにあった通り、読み取り専用のようです。



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