むずかしいことはわかりません

いろいろ書いてるみたいな

UTF-8での文字列の表示

今回のソースはすべてUTF-8で書いています。UTF-8で保存するだけでなく、ファイルの先頭に

# -*- coding: utf-8 -*-

と書くことでUTF-8対策は万全!らしいのですが…なぜかエラーが出ます。

今回は入力された文字列をURLエンコード(%80%E0みたいなやつ)して変数に格納するのとそれをデコードする部分を作っていたんですが、いざデコードした文字列を表示するたびに

A server error occurred.  Please contact the administrator.

という表示に悩まされていました。

悩んでいても仕方ないので検索してみたところ、かせきのうさぎさん(http://d.hatena.ne.jp/itasuke/20080703)のエントリの中で見つけました。

content = urllib.unquote(article.content).encode('raw_unicode_escape').decode('utf-8')
self.response.out.write ("%s" % content )

確かに二重変換なのでパッと見よくわからないコードになってしまいますが、今のところはライブラリに手を入れるのではなくて、こちらのコードで対応してみたところ、エラーもなく無事にデコードできました。

入力した文字列をURLエンコードする場合は、

import urllib

content = urllib.quote(article.content.encode('utf-8'))

といった具合に urllib にある quote を使うことによってエンコードすることができます。