# coding: utf-8 def foo(): """ほにゃらら"""
一般的にdocstringと言われていて標準的に使われるドキュメント形式なんだけど、上記のように通常の文字列として書いた場合は (Python 2.xでは) byte string になり、utf-8でエンコードされているという情報が抜けてしまう。
当然のように、非ASCIIなbyte stringは慎重に扱わないと、すぐにUnicodeErrorになる。
from __future__ import unicode_literals をするか、 u"""ほにゃらら""" と書くべき。
例えば、Trac-ja が設定項目のdocstringをbyte stringで書いていて、iniadminというプラグインをインストールすると、docstringを表示しようとしてUnicodeDecodeErrorになる。Trac-jaを使うときは defaultencoding を utf-8 にするというバッドノウハウが横行しているが、これは止めたい。