SWF に日本語混じりのBase URL を渡せない
SWF ブラウザ的なアプリで SWF 動作にBase URL の指定が必要なんだが、フォルダ名に日本語などのマルチバイト文字が混ざっていると渡した後に文字化けしてしまう。
文字セットをマルチバイトにしてもUnicode にしても同じ症状、同じ文字化け。
CString baseurl = "file:///c:/フォルダ名/"; this->swf.put_Base( baseurl );
put_Base は (ActiveX Control) ShockwaveFlash を追加すると作成されるshockwaveflash1 クラスで定義されるメソッドで、中身はただのInvokeHelper。
void put_Base(LPCTSTR newValue) { static BYTE parms[] = VTS_BSTR ; InvokeHelper(0x88, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue); }
厄介なのは、呼び出すSWF のURL にマルチバイト文字が混ざっていても問題なく起動できる点。
void put_Movie(LPCTSTR newValue) { static BYTE parms[] = VTS_BSTR ; InvokeHelper(0x66, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue); }
base の指定も movie の指定も、同じように InvokeHelper 。movie 指定の動作を見る限り、AcitveX コントロールがうまいこと文字コードを調整してくれているようで、External Interface を介したSWF とのデータのやり取りでも特に問題がない。
問題を引き起こすのは Base URL の指定だけ。
マルチバイトの部分をURL エンコードしてみても、むしろパスを解釈しない。UTF8 でも Shift_JIS でも同様。
情報が足りない。調べても分からない。そもそも (ActiveX Control) ShockwaveFlash の情報が少なすぎる。
Base URL の指定なしで動作するようにフォルダ構成を調整できればいいんだが、それだとクライアントの要件と噛み合わない。
さて、どうしたものか。