かきかたえんぴつ

いつかどこかで何かの役にたつかもしれないメモ

JessyInk でトランジション効果を使う

環境は Windows 7 Home Premium + Inkscape 0.48.2。

スライド名に日本語を使うと、トランジションの設定で文字コード関係のエラーが起きる。

エラーメッセージ:

Traceback (most recent call last):
  File "jessyInk_transitions.py", line 74, in <module>
    effect.affect()
  File "C:\Program Files (x86)\Inkscape\share\extensions\inkex.py", line 215, in affect
    self.effect()
  File "jessyInk_transitions.py", line 53, in effect
    nodes = self.document.xpath(unicode("//*[@inkscape:groupmode='layer' and @inkscape:label='" + self.options.layerName + "']", 'utf-8'), namespaces=inkex.NSS)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x81 in position 53: unexpected code byte

self.options.layerName が Shift_JIS で入っているようで、これを utf-8 に変えないといけない。そのため Shift_JISunicodeutf-8 という変換をする。unicode というのは Python の変数の型。

具体的には、Inkscape\share\extensions\jessyInk_transitions.py の 53 行目

self.options.layerName

self.options.layerName.decode('Shift_JIS').encode('utf-8')

と変える。.decode('Shift_JIS') で unicode に変わり、.encode('utf-8') で utf-8 に変わる。これをこの後 unicode 型に変換しているんだから……もっとシンプルなコードにできそうだけど、まあいいや。