前提・実現したいこと
登録フォームを作っています。
文字コードは、utf-8で統一したいと思っています。
index.htmlは、terapadを用いて文字コードもutf-8で作成しましたので、
最初の確認ページは、pythonで書いたcgiでformの日本語(「name='姓'」や「name='名'」)も認識できております(日本語あってるかな??)
しかし、その次のページに行くと日本語(「name='姓'」や「name='名'」)が認識されなくなってしまいます。
「姓」「名」が「None」「None」になってします。
pythonでかいたcgiの中のdef checkScreen
内のヒアドキュメントで書いている部分がutf-8でないのが原因かなと思っているのですが、どうすればうまくいくかわかりません。
かなり分かりにくい日本語で申し訳ありませんが、何かアドバイスいただけると助かります。
発生している問題・エラーメッセージ
文字コードが統一できない
該当のソースコード
indexhtml
1 2<meta charset="UTF-8"> 3<div id="main"> 4<!---------------------------------------------------------> 5 6<div id="invisible"> 7<!---------------------------------------------------------> 8<div class="bar">Testフォーム</div> 9 10<form name="myForm" method="post" action="cgi-bin/test.py"> 11 12<table> 13 <tr> 14 <td>氏名 :</td> 15 <td><input type="text" name="姓" size="12"> <input type="text" name="名" size="12"></td> 16 </tr> 17</table> 18<br> 19<div align="center"> 20<input type="submit" value="入力内容の確認"> <input type="reset" value="リセット"> 21</div> 22</form> 23 24 25</div><!-- makeup 終わり --> 26</div><!-- main 終わり --> 27
python
1# -*- coding: utf-8 -*- 2""" 3Created on Tue Feb 19 16:33:29 2019 4 5""" 6import cgi 7import cgitb 8cgitb.enable() 9 10import sys 11sys.stdout.reconfigure(encoding='utf-8') 12 13 14""" --- データの受け取り --- """ 15param = cgi.FieldStorage() 16param_dict = param.list 17 18# ユーザー姓(メール件名に表記) 19Sei = param.getvalue('姓') 20 21# ユーザー名(メール件名に表記) 22Mei = param.getvalue('名') 23 24""" --- 内容確認画面 --- """ 25def checkScreen(): 26 mail_table = '' 27 for i in param_dict: 28 if i.name != '': 29 param_i = param.getvalue(i.name) 30 else: 31 param_i = '' 32 mail_table += '<tr><th>' + i.name + '</th><td class=\"a\">' + param_i + '<input type=\"hidden\" name=\"' + i.name + '\" value=\"' + param_i + '\"></td></tr>\n' 33 34 """ --- ヒアドキュメント --- """ 35 36 import textwrap 37 38 string = textwrap.dedent(''' 39 Content-type: text/html 40 41 <html><head> 42 <title>FormMail</title> 43 <style type="text/css"> 44 <!-- 45 table{{ 46 border: none; 47 }} 48 td{{ 49 font-size: 14px; 50 }} 51 table.a{{ 52 border: 1px #888888 solid; 53 border-collapse: collapse; 54 }} 55 th{{ 56 width: 120px; 57 text-align: left; 58 font-size: 14px; 59 background-color: #fffacd; 60 padding: 5px 10px; 61 border: 1px #888888 solid; 62 font-weight: normal; 63 }} 64 td.a{{ 65 padding: 5px 10px; 66 border: 1px #888888 solid; 67 font-size: 14px; 68 }} 69 .font12 {{ font-size: 12px; }} 70 a {{ color: #0033CC; }} 71 a:hover {{ color: #CC0000; }} 72 }} 73 --> 74 </style> 75 </head> 76 77 <body bgcolor="#FFFFFF" text="#000000"> 78 <table width="600" align="center"> 79 <tr> 80 <td><br><b><font size="4">確認画面</font></b><br><br></td> 81 </tr> 82 83 <tr> 84 <td> 85 ※入力した内容を確認してください。 86 <br> 87 88 <form method="post" action="test.py"> 89 <input type="hidden" name="mode" value="check"> 90 91 <table class="a" border="1" width="580"> 92 {mail_table} 93 </table> 94 95 <br> 96 <input type="submit" value=" 確 認 "> 97 <input type="button" value="もどる" onClick="JavaScript:history.back()"><br><br> 98 <br><br> 99 </form> 100 101 </td> 102 </tr> 103 </table> 104 105 </body> 106 </html> 107 ''').format(mail_table=mail_table).strip() 108 print(string) 109 110def sub(): 111 import textwrap 112 113 string = textwrap.dedent(''' 114 Content-type: text/html 115 <meta charset="UTF-8"> 116 <html><head> 117 118 <title>文字化けテスト</title> 119 120 <style type="text/css"> 121 <!-- 122 td {{ font-size: 14px}} 123 a {{ color: #003399}} 124 a:hover {{ color: #CC0000}} 125 --> 126 </style> 127 </head> 128 <body bgcolor="#FFFFFF" text="#000000"> 129 130 <br> 131 <table width="550" border="2" bordercolor="#4169E1" cellpadding="3" cellspacing="0" align="center"> 132 <tr> 133 <td bgcolor="#4169E1"><font color="#FFFFFF"><b>確認完了</font></td> 134 </tr> 135 <tr> 136 <td> 137 <br> 138 <blockquote> 139 <b>「 {sei} {mei} 」</b><br>文字化けテストへのご協力ありがとうございました。<br><br> 140 <p><font size=2><a href="javascript:history.go(-2)">入力フォームに戻る</a></font> 141 </blockquote> 142 </td> 143 </tr> 144 </table> 145 </body></html> 146 147 ''').format(sei=Sei, mei=Mei).strip() 148 print(string) 149 150 151""" --- メインシーケンス ---""" 152if not param.getvalue('mode'): 153 checkScreen() 154else: 155 sub() 156exit() 157
試したこと
def checkScreen内のヒアドキュメントに<mate charset="utf-8">
を入れたりしたのですが、
ページ全体が文字化けしてします。
補足情報(FW/ツールのバージョンなど)
windows10 64bit
python3.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/22 13:27
2020/04/22 14:05 編集
2020/04/22 14:19
2020/04/22 14:28
2020/04/22 14:32
2020/04/22 14:32
2020/04/22 14:33
2020/04/22 14:34
2020/04/22 14:39
2020/04/22 14:40
2020/04/22 14:46
2020/04/22 14:49
2020/04/22 14:51
2020/04/22 14:54
2020/04/22 15:02
2020/04/22 15:07
2020/04/22 15:18
2020/04/22 15:30
2020/04/22 15:33
2020/04/22 15:36