python3でHTMLのフォームに入力した内容をPOSTして表示させようとしています。半角英数字だと正常に表示されるのですが、日本語や大文字だと文字化けしてしまいます。エンコード絡みだと思うのですが、解決の糸口が見つかりません。解決策をご教授願えないでしょうか。
■■■ソース 入力用プログラム edit.py■■■ #!/usr/bin/env python3 # -*- coding: utf-8 -*- import cgi import html import sqlite3 import urllib # DB接続 conn = sqlite3.connect('repairs.db') # Cursor オブジェクトでリストデータとして一括で読み取り cur = conn.cursor() # execute でクエリ実行 cur.execute('SELECT * FROM tasks') results = cur.fetchall() # resultsに二次配列としてDB結果が格納される # 配列の要素数取得 print(len(results)) # 行の数 print(len(results[0])) # 列の数 0行目の要素数を持ってくる pythonは列の要素数が一致しなくても良い title = "{} {} {} 詳細".format(results[0][2],results[0][3],results[0][5]) # TOP一覧 HTML print('Content-type: text/html') print('') print('<!DOCTYPE html>') print('<html lang="ja">') print('<head>') print('<title>入力フォーム</title>') print('<style type="text/css">') print('h1{background-color:#EEEEEE;border-bottom:1px solid #4C4C4C;border-top:2px solid #4C4C4C;color:#0000DD;font-size:16px;margin: 5 0 5 0;padding: 5px;}') print('table{border-collapse:collapse;}') print('table,th,tr,td {border:1px solid #808080;}') print('table,th,tr,td {padding:6px;table-layout:fixed;}') print('td.ttd {background-color:#dcdcdc;width:100px;}') print('td.ntd {width:200px;}') print('td.std {width:600px;min-height:50px;}') print('th.tht {background-color:#dcdcdc;width:150px;font-weight: normal;}') print('td.itd {width:200px;padding:3px;}') print('input[type=text] {width:200px;height:20px;font-size:16px;}') print('</style>') print('</head>') print('<body>') print('<h1>POSTテスト</h1>') print('<form name="Form" method="POST" action="http://localhost:8080/cgi-bin/posttest.py">') print('<input type="text" name="id" value="テスト">') print('<input type="text" name="estno" value="入力">') print('<div align="center"><input type="submit" value="確認画面へ"></div></form>') print('</body>') print('</html>') cur.close() conn.close() ■■■ソース 出力用プログラム posttest.py■■■ #!/usr/bin/env python3 # -*- coding: utf-8 -*- import cgi import html import sqlite3 import urllib import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') form = cgi.FieldStorage() no = form.getvalue('id','') estno = form.getvalue('estno','') print('Content-type: text/html; charset=UTF-8\r\n') print('') print('<!DOCTYPE html>') print('<html lang="ja">') print('<body>') print('<h1>入力結果</h1>') print(no) print(estno) print('</body>') print('</html>')
###補足情報(言語/FW/ツール等のバージョンなど)
言語:python3
Windows7Pro32bitのクライアントで開発しています
Atomで作成中です。
Atomの環境はUTF-8です。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー