0
0 комментариев

Добрый день!

Помогите решить проблемку с кодировками. Имеем Python 3.2, на котором написан скрипт обрабатывающий данные, полученные из формы. Данные просто сохраняются в базе данных Postgres.

Вот кусок кода формы:

"form1" action = "/cgi-bin/add_dolz.py" method ="GET">
            Наименование: <input type = "text" name = "d_name"><br>
            Тарифный разряд: <inp ut type = "text" name = "d_razr">
<br><br>
<input type = "submit" value = "Добавить">

Вот кусок скрипта обрабатывающий форму: (Python 3.2)

def Main():
 
    # Получаем пераметры скрипта
    f = cgi.FieldStorage()
    a  = f["d_name"].value
    b  = f["d_razr"].value
 
    # Формируем запрос на добавление строки в таблицу
    quer = "INSERT INTO DOLZ(NAME,RAZR) VALUES ('%s',%s)" % (a,b)
 
    # Подсоединяемся к серверу
    conn = psycopg2.connect(host=HOST, database=DBASE,user=USER,password=PASS)
    cur = conn.cursor()
 
    # Выполняем запрос
    cur.execute(quer)
 
    # Сохраняем результаты запроса в БД
    conn.commit()
 
    # Закрываем соединения с БД
    cur.close()
    conn.close()
 
    # Формируем ответную html страницу
    thepage = '''<html>
                <head>
                 <title>Сообщение</title>
                 </head>
                <body>Результаты сохранены в БД PostgreSQL</body>
                </html>'''
 
    # отправляем страницу на сервер
    PrintPage(thepage)
 
# ********************************************************
if __name__ == '__main__':
    Main()

Когда я в форму ввожу данные в английской раскладке — все отрабатывается нормально. Данные сохраняются в базе данных.

Когда ввожу поля кириллицей — в браузере вылетает такая ошибка:

Traceback (most recent call last):
File
«c:shttpswwwcgi-binadd_dolz.py»,
line 68, in Main() File
«c:shttpswwwcgi-binadd_dolz.py»,
line 45, in Main cur.execute(quer)
File «C:Program FilesPython
3.2.1libencodingscp1251.py», line 12, in encode return
codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: ‘charmap’ codec
can’t encode characters in position
37-41: character maps to

Я так понимаю, что данные из формы поступают в кодировке cp1251, их надо как-то преобразовать в unicode, перед тем, как записывать в базу данных??

Заранее спасибо.


Добавить комментарий