Найти - Пользователи
Полная версия: Проблема отображения русских букв в базе данных
Начало » Базы данных » Проблема отображения русских букв в базе данных
1
sidalexsandr
Написал использовать кодировку 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) Как сделать чтобы в базу данных можно было добавлять и читать из неё значения колонок занесенные русскими буквами?
dimabest
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')
sidalexsandr
Спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB