質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

2262閲覧

【Python】UnicodeDecodeErrorについて

4mmsod

総合スコア15

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2015/07/23 01:43

現在flaskを使ったWebアプリの製作をこちらのサイトを参考に行っています。

http://qiita.com/ynakayama/items/2cc0b1d3cf1a2da612e4

ところが実行してみると

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)

という(私的には)いつものエラーが・・・。
これまでは該当箇所に.encode("UTF-8")といれたりしてなんとかやってきたのですが今回はどこにいれたらいいかもわからずです。
よろしければご指導ください。

以下コードです。

【numpy.py】

coding=UTF-8

Flask などの必要なライブラリをインポートする

from flask import Flask, render_template, request, redirect, url_for
import numpy as np
import random

自身の名称を app という名前でインスタンス化する

app = Flask(name)

メッセージをランダムに表示するメソッド

def picked_up():
messages = [
"こんにちは、あなたの名前を入力してください",
"やあ!お名前は何ですか?",
"あなたの名前を教えてね"
]
# NumPy の random.choice で配列からランダムに取り出し
return np.random.choice(messages )

ここからウェブアプリケーション用のルーティングを記述

index にアクセスしたときの処理

@app.route('/')
def index():
title = "ようこそ"
message = picked_up()
# index.html をレンダリングする
return render_template('index.html',
message=message, title=title)

/post にアクセスしたときの処理

@app.route('/post', methods=['GET', 'POST'])
def post():
title = "こんにちは"
if request.method == 'POST':
# リクエストフォームから「名前」を取得して
name = request.form['name']
# index.html をレンダリングする
return render_template('index.html',
name=name, title=title)
else:
# エラーなどでリダイレクトしたい場合はこんな感じで
return redirect(url_for('index'))

if name == 'main':
app.debug = True # デバッグモード有効化
app.run() # どこからでもアクセス可能に

【layout.py】

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> {% if title %} <title></title> {% else %} <title>Bootstrap 101 Template</title> {% endif %} <!-- Bootstrap --> <link href="/static/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]-->
</head> <body> {% block content %}{% endblock %} <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="/static/js/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="/static/js/bootstrap.min.js"></script> </body> </html>

【index.py】

{% extends "layout.html" %}
{% block content %}

<!-- Form ================================================== --> <div class="form"> <div class="container"> <div class="row"> <div class="col-md-12"> <p class="lead"> {% if name %} こんにちは {{ name }} さん {% else %} {{ message }} {% endif %} </p> <form action="/post" method="post" class="form-inline"> <label for="name">名前</label> <input type="text" class="form-control" id="name" name="name" placeholder="Name"> <button type="submit" class="btn btn-default">送信する</button> </form> </div> </div> </div> </div> {% endblock %}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

日本語ドキュメントのゴールデンルールの項を見ると、コードの1行目か2行目に「# -- coding: utf-8 --」を入れろと書かれてますね。
当然コードもUTF-8で保存が必要です。

次にサーバになにを利用されているのか分からないのですが、送信時のエンコード設定がUTF-8以外になっているという可能性も考えたほうが良いかもしれません。
curlを使ってHTTPのレスポンスを見るとGETした内容の確認ができると思うので、試してみてはどうかと思います。(→参考サイト

僕も詳しくはないので、上記がなにかの助けになれば良いのですが…。

投稿2015/07/25 17:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問