HTAのtextarea内ではWindows-31Jしか表示できない?
HTA の続き。
arton さんに指摘していただいて meta での charset の指定が間違っていたことがわかったので、そのあたりはちゃんと表示されるようになった。UTF-8 を指定して UTF-8 で保存した HTA を実行したときに、直接記載していたテキストはちゃんと表示された(タイトルとか、ボタンの名前とか)。
ただ、それでもやはり textarea 内にファイルの内容を表示しようとすると Winodws-31J にしないと文字化けしてしまう。
読み込むファイルは UTF-8 で保存されていて、File.open(filename, "r:UTF-8") として、読み込んでいく行そのものは UTF-8 であるのは確認。それを textarea.value に与えても UTF-8 のままでは文字化けしてしまう。value.encode("UTF-8") とか、value.force_encoding("UTF-8") としても同じこと。
ためしに html として開いてみると、当然のごとく ActiveX コントロールの許可なんたらかんたらというのが出るので、許可とするのだけれどボタンなどを押しても無反応。ただ、UTF-8 のテキストを textarea に貼り付けてみるとこれまた当然だろうけれどちゃんと表示してくれる。
HTA の textarea ではWindows-31J での入力・表示しか対応してないってことなのだろうか? だって日本語 Windows でしょ? とかいうことで。
ためしに div タグで表示領域を用意して、そこに innerHTML = text としてみたけれど文字化けについては同じだった。さらには改行の変換処理をしないと連続してしまうので、これもまた面倒であると。
html にしてもきちんと動作するならそちらにすればよいのだろうけれど、このままではどうも駄目なようで。なかなか両方うまくというわけにいかずに悩み中。
#とかやっていたら、コピー&ペーストすると UTF-8 文字列がちゃんとはいることが確認できた。直接入力するのも同様。ファイルを開いて読み込んでというのだけ化けてしまう。
#ファイルから読み込んだ内容を textarea.value に渡すして、textarea.value のエンコードを表示してみたら、ファイルのエンコードに関係なく ASCII-8BIT になっていた。 あとで force_encoding しても駄目だった。
ということで文字列を渡すと ASCII-8BIT になってしまうのが問題みたいだ。直接入力やペーストなら問題ないので。
| 固定リンク
コメント
それは、ASR(Win32OLEは対応されている)の問題です。WindowsでANSI以外のスクリプトが動くことを想定していませんでした。でも、HTAならutf-8にするのが当然ですよねぇ。
そのうち直しますが、当面は、COMオブジェクトに与える文字列はWindows-31Jにしてください。
すみません。
投稿: arton | 2012.05.09 10:47
なるほど、そうでしたか。(なんとなくそんな気はしてきていたのですが)
通常はまず問題ないのでとりあえずは、 Windows-31J にします。
よろしくお願いします。
投稿: ムムリク | 2012.05.09 12:08