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

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

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

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

Unicode

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

HTML

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

Q&A

解決済

1回答

436閲覧

Python3,Chromeでの日本語表示について

nau

総合スコア8

Python 3.x

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

Unicode

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

HTML

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

0グッド

0クリップ

投稿2017/08/06 11:55

###前提・実現したいこと
python3.6.2 を用いて、みんなのpython webアプリ編を学習しています。
("webアプリケーションに値を渡す"http://coreblog.org/ats/stuff/minpy_web/04/index.htmlに該当。)
Chromeにて"「13日の金曜日」を探すWebアプリケーション"を実行しようと考えています。
ソースコードの文字フォーマッティングに原因があると考え、文字コードについて調べてみましたが上手く対応出来ず、解決方法をご教示いただけますと幸いです。

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

b'\n\n \n %d\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93%d\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93%d\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93%d\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93%d\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x933000\xe5\xb9\xb46\xe6\x9c\x8813\xe6\x97\xa5\xe3\x81\xaf\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\xa7\xe3\x81\x99 3000\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf\xe5\x90\x88\xe8\xa8\x881\xe5\x80\x8b\xe3\x81\xae13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x993000\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf\xe5\x90\x88\xe8\xa8\x881\xe5\x80\x8b\xe3\x81\xae13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x993000\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf\xe5\x90\x88\xe8\xa8\x881\xe5\x80\x8b\xe3\x81\xae13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x993000\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf\xe5\x90\x88\xe8\xa8\x881\xe5\x80\x8b\xe3\x81\xae13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x993000\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf\xe5\x90\x88\xe8\xa8\x881\xe5\x80\x8b\xe3\x81\xae13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x993000\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf\xe5\x90\x88\xe8\xa8\x881\xe5\x80\x8b\xe3\x81\xae13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x993000\xe5\xb9\xb4\xe3\x81\xab\xe3\x81\xaf\xe5\x90\x88\xe8\xa8\x881\xe5\x80\x8b\xe3\x81\xae13\xe6\x97\xa5\xe3\x81\xae\xe9\x87\x91\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99\n \n'

以上の様に日本語がうまく表示されません。

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

# coding: UTF-8 import cgi from datetime import datetime html_body = """ <html><meta charset="utf-8"> <body> %s </body> </html>""" content='' form=cgi.FieldStorage() year_str=form.getvalue('year','') if not year_str.isdigit(): content=u'西暦を入力してください' else: year=int(year_str) friday13=0 for month in range(1,13): date=datetime(year, month, 13) if date.weekday()==4: friday13+=1 content+=u"%d年%d月13日は金曜日です" % (year, date.month) content+=u"<br>" if friday13: content+=u"%d年には合計%d個の13日の金曜日があります" % (year, friday13) else: content+=u"%d年には13日の金曜日がありません" print ("Content-type: text/html;charset=utf-8\n") print ((html_body % content).encode('utf-8'))

###補足情報(言語/FW/ツール等のバージョンなど)
windows10
python3.6.2
Chromeバージョン: 59.0.3071.115
atom
を使用しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

str型オブジェクトのencode関数は文字列をバイト型に変換します。
str型は文字列を表現するオブジェクトです。これを「特定のエンコーディングで表現すると、それがどういうバイト形式になるか?」が欲しい時に使うものです。
http://docs.python.jp/3.6/library/stdtypes.html#str.encode


Python

1print ((html_body % content).encode('utf-8'))

という風に、UTF-8エンコーディングで表現したときのバイト列を取得してprintしろ、と書いてます。
printは文字列を出力するための関数です。
だから、プログラマが見てバイト列がどうなっているのかが理解できるような表現でprintしてくれています。

Python2ではstr型がバイト文字列型で、unicode型がユニコード文字列型であって、encodeメソッドはstr型をunicode型に変換するためのものでした。Python3では変更されています。

Python3を使っているなら単に

Python

1print(html_body % content)

とするか

Python

1import sys # スクリプト冒頭が望ましいです 2 3sys.stdout.buffer.write((html_body % content).encode('utf-8'))

とします。
前者はPythonのデフォルトのエンコーディングで出力します。デフォルトのエンコーディングがUTF-8以外だったら期待通りの動作をしないでしょう。
後者は問答無用でUTF-8でエンコーディングしたデータを出力します。


Python2で書かれた説明を読みながらPython3の勉強をするのは止しておいた方がいいですよ。
それはPython2とPython3の両方がわかっている人でないとできないということですから。

投稿2017/08/06 13:49

quickquip

総合スコア11038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問