Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2009 02:54:11

sidalexsandr
От:
Зарегистрирован: 2009-07-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема отображения русских букв в базе данных

Написал использовать кодировку utf-8

1) Скрипт создания базы данных в третьей колонке значение русскими буквами
# -*- coding: utf-8 -*-
import sqlite3

con = sqlite3.connect('books.db')
cur = con.cursor()
cur.execute('CREATE TABLE books (id INTEGER PRIMARY KEY, title VARCHAR(100), author VARCHAR(30))')
cur.execute('INSERT INTO books (id, title, author) VALUES(1, “Mathematics”, “Иванов”)')
cur.execute('INSERT INTO books (id, title, author) VALUES(2, “lirika”, “Петров”)')
cur.execute('INSERT INTO books (id, title, author) VALUES(3, “Astronomija”, “Сидоров”)')
con.commit()
cur.close()

2) Скрипт добавления и просмотра:
# -*- coding: utf-8 -*-
import string,cgi,sqlite3
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

page0=“”“
<b>menu</b><rb>
<form action=”“ method=”post“ > <input type=”submit“ value=”send post“ > </form>
<form action=”sql“ method=”get“ > <input type=”submit“ value=”books base“ > </form>
”“”

page_start=“”“
<b>books</b><br>
<table border=1 width=600> <tr><td><b>id</b></td><td><b>title</b></td><td><b>author</b></td></tr>
”“”

page_end=“”“
</table>
<form action=”sql“ method=”get“ > <input type=”submit“ value=”show all“ > </form>
<form action=”send_select“ method=”get“ > id: <input name=”id“ type=text size=3> <input type=”submit“ value=”select“ > </form>
<form action=”send_delete“ method=”get“ > id: <input name=”id“ type=text size=3> <input type=”submit“ value=”delete“ > </form>
<form action=”send_put“ method=”get“ > id: <input name=”id“ type=text> title: <input name=”title“ type=text> author: <input name=”author“ type=text> <input type=”submit“ value=”put“ > </form>
”“”


def show_base(self):
page=page_start
con = sqlite3.connect('books.db')
cur = con.cursor()
cur.execute('SELECT * FROM books')
for row in cur: page+='<tr><td>'+str(row)+'</td><td>'+row+'</td><td>'+row+'</td><tr>'
page+=page_end
cur.close()
self.wfile.write(page)




class MyHandler(BaseHTTPRequestHandler):

def do_GET(self):

plist = self.path.split(“?”)
self.send_response(200)
self.send_header('Content-type', ‘text/html’)
self.end_headers()

if plist=='/' : self.wfile.write(page0)

if plist=='/send_put' :
pl=plist.split(“&”) #split values
l1=pl.split('=') #get id value
l2=pl.split('=') #get title value
l3=pl.split('=') #get author value
data=(l1,l2,l3)
con = sqlite3.connect('books.db')
cur = con.cursor()
cur.execute('INSERT INTO books (id, title, author) VALUES(?, ?, ?)',data)
con.commit()
cur.close()
show_base(self)



if plist=='/sql' : show_base(self)




def main():
server = HTTPServer(('', 80), MyHandler)
print ‘started httpserver…’
server.serve_forever()


if __name__ == ‘__main__’:
main()



Вопрос: 1) Почему при запуске второго скрипта он ругается на кодировку русских букв и не показывает базу данных? (Если в третьей колонке ввести англискими буквами то все отображается).
2) Как сделать чтобы в базу данных можно было добавлять и читать из неё значения колонок занесенные русскими буквами?



Офлайн

#2 Июль 19, 2009 02:53:33

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема отображения русских букв в базе данных

1. Потому-что sqlite по умолчанию возвращает все строки в unicode, а тебе нужна конкретная кодировка.
2. Сделать очень просто:

con = sqlite3.connect('books.db')  
con.text_factory = str
Теперь все строки из БД будут в конкретной кодировке, по умолчанию UTF-8.
Чтобы броузер не рисовал кракозябры - в твоем методе do_GET нужно указать правильный заголовок:

self.send_header('Content-type',    'text/html; charset=UTF-8')



Отредактировано (Июль 19, 2009 02:54:19)

Офлайн

#3 Июль 29, 2009 15:13:05

sidalexsandr
От:
Зарегистрирован: 2009-07-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема отображения русских букв в базе данных

Спасибо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version