d:id:xworks:20061217#c1166422715 を受けて

なんか長文になりそうだったので新しく書いてみる。

私がパッとみた感じでは問題点は次の二点?

  • テンプレートの出力が UTF-8 ではない?

更新履歴に support for UTF-8 templates とあり HTML template の編集の入力時は UTF-8 の例 で上げられるような文字を混在して表示ができるので UTF-8 に対応しているように見えるが例えばこの例文を入力したテンプレートをエクスポートすると SHIFT-JIS として保存されていて SHIFT-JIS 外の文字が失われる。逆に外部エディタで UTF-8 として保存したものをインポートした場合も文字化けを引き起こして正しく解釈されない。

この問題はエクスポート/インポートだけでなく設定保存時のテンプレートの保存処理にも及んでいるためエクスポート時と同様に文字が失われる。また、このテンプレートを利用して HTML を出力する際にも同様の問題があるような感じがする。

  • VFS は SHIFT-JIS で処理されている。

次に上の例文からそう例えば韓国語の例文の一部をファイル名にして HFS に登録してみると文字化けする。このことから VFS では UTF-8 に未対応であることが伺えるというか SHIFT-JIS で処理されているようだ。この SHIFT-JIS でやりとりしているモノをそのまま テンプレートにファイル名として出力してしまうからファイル名が SHIFT-JIS になってしまって文字化けすると思われる。

しかし文字化けするといっても 日本語名のフォルダの中身を表示することが可能である。これは Wiki で日本語名のページを作った時と同じような手法 bin2hex *1が取られているからであり、例えば、日本語 → %93%FA%96%7B%8C%EA がこのように変換されている。この %93%FA%96%7B%8C%EA を元に戻してやる*2とやっぱり SHIFT-JIS で 「日本語」となっていることがわかる*3

こんな感じでしょうか?
私も大して詳しいわけではないんで絶対そうだとは云えないんですが。

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

そもそも、この一文はこれから送る内容は text/html で文字コードUTF-8 だよと宣言しているに過ぎないんで、これを加えたからと UTF-8 になるということは無いはずです。もちろん、この一文が入力されているかを判定して内部で文字コードを変換するとかなら別ですけどね。

*1:文字列を16進形式に変換する

*2:バイナリエディタにこの16進数を入力する

*3:UTF-8 なら「日本語→%E6%97%A5%E6%9C%AC%E8%AA%9E」になるはず