はてなブックマークへのエクスポート(2)

  • 結論。firefoxdel.icio.us extension で extended を日本語で記述するさいは、80文字ぐらいで収まるようにすること。

タイムアウト以外の原因でスクリプトの実行が止まることがあるので、エラーログをまじめに調べてみました。delicious.py で利用されているxml.parsers.expat の中でパースエラーを起こしていました。どうやら del.icio.us の返してきた XML に不正な箇所があるということです。

どうも、extended の文字列が UTF-8 の文字境界を気にせず切られているとダメみたいです。firefoxdel.icio.us extension は extended の記入欄で日本語の1文字を 1byte としてカウントするのですが、実際はエスケープされた文字列の長さが 255byte を超えた部分がカットされます。このとき UTF-8 の文字シーケンスの途中で切れた状態で extended が登録されてしまうことがあるようです。

...と、いろいろやってみているうちに、日本語の1文字が 3byte 換算されているので URI encode 後の文字列長で 255byte に制限されているような気がしました。JavaScriptURI encode についてちょっと調べたのですが、これもまたブラウザやバージョン依存でさまざまな encode 関数がある魔の領域のような感じです。