Python3で 以下のような簡単なWEBアプリを作りたいと思っています。
・sqlite3 にいれたデータを
・Webで開き、追加、削除できるようにする。
を作成しています。
Python3でprint実行すると 文字化けせずに日本語が表示されます。
これを localhost接続して Cromeでも IEでも 表示しようとすると文字化けしてしまいます。
原因と対策のアドバイスをいただけないでしょうか?
【1.コード】
#!/usr/bin/env python3
import cgi
import html
import sqlite3
conn = sqlite3.connect('todolist.db')
curs = conn.cursor()
print('Content-type: text/html')
print('')
def print_html(data=""):
print('''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Todoリスト</title>
</head>
<body>
<form action="todo.py" method="post">
タスク名<input type="text" name="name">
<input type="hidden" name="mode" value="add">
<input type="submit" value="追加する">
</form>
<ul>
{0}
</ul>
</body>
</html>
'''.format(data))
form = cgi.FieldStorage()
mode = form.getvalue('mode')
if mode == 'add':
name = form.getvalue('name')
name = html.escape(name)
sql = ('INSERT INTO tasks(name) VALUES (?)') curs.execute(sql, (name,)) conn.commit()
if mode == 'done':
id = form.getvalue('id')
id = html.escape(id)
sql = ('DELETE FROM tasks WHERE id = ?') curs.execute(sql, (id,)) conn.commit()
curs.execute('SELECT * FROM tasks')
rows = curs.fetchall()
data = ""
for id, name in rows:
data += '''
<li>{0}
<form action="todo.py" method="post">
<input type="submit" value="消去する">
<input type="hidden" name="id" value="{1}">
<input type="hidden" name="mode" value="done">
</form>
</li>
'''.format(name, id)
print_html(data)
【2.pythonでの print_html(data)実行】
<!DOCTTYPE html><html> <head> <meta charset="UTF-8"> <title>Todoリスト</title> </head> <body> <ul> <li>あいうえおか</li> <li>かきくけこ</li> <li>さしすせそ</li> </ul> </body> </html>
【3.Crome/IEでの表示】
�^�X�N��
�m�[�g�????��ɂ���
�؎�????��ɂ���
�m���????��ɂ���
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/22 07:50