- 例外クラスがformat stringにbyte stringを使っていたので、"%s" % (foo,) みたいな部分で foo.__unicode__ ではなくて foo.__str__ が呼ばれてしまっていた。 __str__ を使うとunicodeのパスをutf8にencodeしてしまうクラスがあり、Windowsでエラーを出すとutf8でエンコードされた日本語パスが文字化けしていた。とりあえず目に付くフォーマット文字列に u を付けまくった。フォーマット文字列自体がascii文字しか含んでいなくても%sを使うならunicodeを使うべきって、ASCII圏の人は気づきにくい点の一つだな。
- エラーを出力するときに、sys.stderr.write() を使っていた。 file.encoding の convention が判らない - methaneの日記 で書いたとおり、これではunicode文字列を出力できないので、codecs.getwriter()を使ってwrapした。
- qbzr が、 bzr が文字化けしたエラーを出力したときに UnicodeDecodeErrorでクラッシュしていたので、stderrをdecodeするときに error='replace' するようにした.
- qbzr が PyQt 4.5 に対応していない問題に対応するブランチがqbzrのtrunkに取り残されていたので、trunkの変更点をmergeした。
全部launchpad上にpushして、バグ登録してbranchを関連付けた。2.0が出る前には取り込んでもらいたいな。