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 を使うことによってエンコードすることができます。

広告

About sato_c

小学生の頃にインベーダーゲームやPC-8001やApple][といったものを知ってしまい、それ以降ずーっとゲーム好き。でも、あんまりうまくはありません。 仕事は当初はゲーム関係のプログラムやサウンドをやっていましたが、WEB関係を通ったあと、遊技機関係のプログラムやサウンドをやっています。あまり節操がないのか。 現在はJavaですてきなコードを書けるように勉強中。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。