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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4400閲覧

python3でUnicodeEncodeErrorが解決できません

TakumaSato

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

1クリップ

投稿2016/07/13 02:57

###前提・実現したいこと
python3.5.1 を用いて、みんなのpython webアプリ編を学習しています。
("webアプリケーションに値を渡す"に該当。)

以下の動作をするスクリプトを作りたいです。
・UIで現在の西暦の前後10年をoptionに与える。
・選ばれたoptionの西暦に13日の金曜日が何回あるかを返す。

自分なりにいろいろと試してみましたが解決できませんでした。
ご教授の程よろしくお願い致します。

###発生している問題・エラーメッセージ

line 44, in <module>\r\n print (html_body % (options, content))\r\nUnicodeEncodeError: \'cp932\' codec can\'t encode character \'\\ufffc\' in position 2: illegal multibyte sequence\r\n'

line44 は該当ソースコードの最後の行です。

###該当のソースコード

python

1# coding: utf-8 2 3import cgi 4from datetime import datetime 5html_body = """ 6<html><head> 7 <meta http-equiv="content-type" content="text/html" /> </head> 8<body> 9 <form method="POST" action="/cgi-bin/f13form.py"> 10西暦を選んでください:<select name="year"> 11 %s 12 </select> 13 <input type="submit" /> 14 </form> 15%s </body> 16</html>""" 17options='' 18content='' 19now=datetime.now() 20for y in range(now.year-10, now.year+10): 21 if y!=now.year: 22 select='' 23 else: 24 select= "selected" 25 options+="<option%s>%d</option>" % (select, y) 26form=cgi.FieldStorage() 27year_str=form.getvalue('year', '') 28if not year_str.isdigit(): 29 content = "西暦を入力してください" 30else: 31 year=int(year_str) 32 friday13=0 33 for month in range(1, 13): 34 date=datetime(year, month, 13) 35 if date.weekday()==4: 36 friday13+=1 37 content+="%d年%d月13日は金曜日です" % ( year, date.month) 38 content+="<br />" 39 if friday13: 40 content+="%d年には合計%d個の13日の金曜日があります" % ( year, friday13) 41 else: 42 content+="%d年には13日の金曜日がありません" 43print ("Content-type: text/html\n") 44print (html_body % (options, content)) 45

###補足情報(言語/FW/ツール等のバージョンなど)
windows10
python3.5.1
atom

を使っています。

mondaminZ👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

\ufffc\u3099というキャラクターコードの文字が悪さをしているようです。

\ufffcのほうは「該当のソースコード」に表示されている「」です。
\u3099のほうは、合字(?)用の「濁点」です。こちらは見分けがつきません。

Atom上での操作ではこれらを上手く取り除くことができませんでした。
サクラエディタというテキストエディターで編集したところ、エラーをなくすことができました。

日本語の部分は何か特殊な方法で入力しているのでしょうか?
⇒これはコピペしただけですよね?


(追記)

みんなのPythonのページから直接コピーをして試してみましたが、再現しませんでした。

試したこと:Windows10のEdgeとFirefoxで、該当コードをAtomにコピペ。

具体的にどのような操作をしたか教えていただけると、何か分かるかも知れません。

投稿2016/07/13 03:41

編集2016/07/13 05:13
argius

総合スコア9388

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

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

Lhankor_Mhy

2016/07/13 04:45

濁音記号ということで utf-8-mac からの文字コード変換のような気がしますよね。\ufffcはいくつかの文字コード変換ツールで代替文字として使われているようです。
argius

2016/07/13 05:15

Lhankor_Mhyさん コメントありがとうございます。 元記事はMacで書かれているのかも知れませんね。 ページのHTMLを見てみると、ところどころ濁音記号(の合字?)が出てきます。 ただ、コード部分はそうではないように見えるんですよね。
TakumaSato

2016/07/13 05:57

ご解答ありがとうございます。 「該当のソースコード」の「」とはどれのことでしょうか? 日本語の部分はサンプルコードのコピーを張り付けておりました。 再度自分のatomで入力し直してみたのですがうまくいきませんでした。 atomは使わないほうがいいのでしょうか? 初学者のため理解が追い付かずすいません。
TakumaSato

2016/07/13 06:05

クロムで該当コードをコピーアンドペーストしました。 元のサンプルコードは、print文に()を付けたり、uを外したり、encode("utf-8")を消したりとところどころいじりました。
argius

2016/07/13 06:07

TakumaSatoさん どうしてこういうことになったのかがまだ突き止められていませんので、 まずお使いのWebブラウザーを教えてください。 ブラウザーからAtomにコピペしたんですよね? > 「該当のソースコード」の「」とはどれのことでしょうか? ブラウザーが違うから見えないのかも知れません。 私はFirefoxで見ていますが、html_bodyの各行の空白部分に特殊な記号が見えます。 > 再度自分のatomで入力し直してみたのですがうまくいきませんでした。 Atomだと一部分だけ消してもうまく行かないみたいです。 1から全部入力しましたか?
Lhankor_Mhy

2016/07/13 06:08

http://coreblog.org/ats/stuff/minpy_web/04/02.html こっちのコードだと、ヒアドキュメント以外もutf-8-macになってる感じですね。 ただ、エラーコードで cp932 のコーデックエラーが出てるのが解せませんね。utf-8 で文字コード指定してるのに print文の自動デコードで cp932 が出るのはなんでだろう?
argius

2016/07/13 06:13

Chromeがダメなのかも知れません。 この質問のページを、 他のブラウザー、EdgeかIEなどで開いてみて下さい。 「該当のソースコード」の部分に変な文字が見えると思います。 同様に、コピペするときもChrome以外のブラウザーで試してみて下さい。 念のため、まっさらなファイルで試してください。
argius

2016/07/13 06:25

Lhankor_Mhyさん > こっちのコードだと、ヒアドキュメント以外もutf-8-macになってる感じですね。 ホントだ。 こちらからコピペしたのかもですね。 > print文の自動デコードで cp932 が出る printでターミナルへの出力時に、 cp932にデコードしているということなんじゃないかと思います。
TakumaSato

2016/07/13 13:08

IEで確認したところ、「該当のソースコードの変な文字」を確認できました。 サンプルコードの「変な文字」をそのままコピペしていたようです。 改めて打ち直したところ、無事に解決できました。 お二方の親切な対応に感激しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問