2005-05-17 [長年日記]

[Q3] IWebBrowser2でエンコーディングの指定

HTMLメールをブラウザコントロールに読み込ませるときにはIInternetSessionとIInternetProtocolなどを使用していて、エンコーディングはIInternetProtocolSink::ReportProgressにBINDSTATUS_MIMETYPEAVAILABLEを指定して渡しています。これで正しく文字コードを認識してくれるのですが、HTML内部でMETAタグを使ってContent-Typeを指定してあるとそちらが優先されてしまいます。

コンテントネゴシエーションの事などを考えると、外部から与えられたContent-Typeを優先すべきだと思われますが、サーバの設定ができずにMETAタグで文字コードが指定してあるページが多い事を考えると仕方がないのかもしれません。

このため、例えばHTMLパートのContent-TypeのcharsetパラメータがISO-2022-JPで、METAタグで指定されたcharsetがShift_JISの場合、Shift_JISとして解釈されてしまいます。これを何とかするために、読み込んだ後でIHTMLDocument2#put_charsetで文字コードを指定すれば良いかと思ったのですが、ここを設定してもだめなようです。

ちょっと試して見たところでは、BOM付きのUTF-16やUTF-8を渡すとMETAタグで他の文字コードが指定されていても無視してくれるようですので、QMAIL側で文字コードをUTF-16かUTF-8に変換してからブラウザコントロールに渡すとうまくいきそうです。しかし、渡す前に文字コードを変えてしまうと他のところで問題が起きそうなのでできるなら避けたいところです。


トップ «前の日記(2005-05-16) 最新 次の日記(2005-05-18)»