アフィリエイト広告を利用しています

広告

posted by fanblog

2020年09月12日

python、cgi、sqlite3にてUnicodeEncodeErrorに苦戦、一応、解決

WordPressはきれいだし、
導入も簡単で、
初心者でも本格的なHPやブログを作成できることは、
私も試したから知っています。

でも、なんか、型にはまった感じがつまらなく、

結局、html、css、cgiをできるだけ自分で書き、

ページが表示されたときの感動がうれしいので、

わざわざ苦労して、書いています。


今回、

1 sqlite3のデータベースに入力

2 画像のURLやコメントをpythonで読み込み

3 webに表示する。

の3で苦戦したので、備忘録です。

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cgi
import sqlite3

print ("""
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> </head>
<title>私の読書感想文</title>
</head>
<body>""")
conn=sqlite3.connect("/book.db")
c=conn.cursor()
for row in c.execute("select * from book_list"):
a=row[2]
b=a.encode("utf-8")
print("""<p>%s</p>""")%(b)
conn.close()

print("""
</body>
</html>
""")



データベースの3列目(row[2])に入力した全角の日本語(utf-8)が表示できず、二日間苦戦しました。

apache2のerror.logを読むと下記のエラー
UnicodeEncodeError: 'ascii' codec can't encode character

おかしいな〜?

python上で #-*-coding: utf-8-*-

html上で charset=utf-8

を宣言しているのに、なぜエンコードエラーがでるのだ?

ネット内の情報を調べまくりました。

結果的に、必要だったのは上記.cgiの18行目です。

sqlite3nデータベースからpythonで読み込んだ日本語は、

なぜかUnicodeで読み込んでいるので、utf-8とUnicodeでケンカしていたようです。

そこで、18行目に

b=a.encode("utf-8")

を挿入し、sqlite3から読み込んだ全角の日本語を改めてutf-8にエンコードしました。

これによって、日本語がcgiで表示できました。

たどり着くまでに2日かかりました。

Screenshot from 2020-09-12 19-47-32.png
検索

私が見た動画紹介コーナー

素敵です

プロフィール
もう一人の自分さんの画像
もう一人の自分
好きなことを仕事にしなかった
プロフィール
最新記事
カテゴリーアーカイブ
ファン
写真ギャラリー
×

この広告は30日以上新しい記事の更新がないブログに表示されております。