mrbloom
Июнь 7, 2010 19:09:56
В продолжение поста
http://python.su/forum/viewtopic.php?id=7667Теперь проблемы с чтением из базы русских буковок
# -*- coding: UTF-8 -*-
import e32,appuifw,e32dbm #import the module
file_nam = u"e:\\Python\\db3.db" #assign the name of the file to a variable
def utf(s):
return s.decode('utf-8')
def create_new(): #define the write function to write in a database
db = e32dbm.open(file_nam,"nf") #open the file
db.close()
def write():
db = e32dbm.open(file_nam,"wf") #open the file
k='Цапро'
v='10'
db[k]=v
k='український'
v='язік'
db[k]=v
k='русская'
v='мова'
db[k]=v
db.close()
def read(): #define a read function to read a database
db = e32dbm.open(file_nam,"rf")
for key, value in db.items(): #read it using the dictionary concept.
print utf(key), utf(value)
#print key,value #C этим вылетает питон системная ошибка(-50)
db.close()
def add():
key,val = appuifw.multi_query(u"name:", u"value:")
db = e32dbm.open(file_nam,"wf")
db[key]=val
db.close()
create_new()
write()#Все ОК
read()#Все ОК
add()#Все ОК
read()#!!!!!Вылетает с ошибкой приведенной ниже!!!!!
Traceback (most recent call last):
File "E:\private\2000b1a5\default.py", line 81, in menu_action
f()
File "E:\private\2000b1a5\default.py", line 65, in query_and_exec
execfile(script_list[index][1].encode('utf-8'), script_namespace.namespace)
File "e:\python\simp_db1.py", line 45, in ?
read()
File "e:\python\simp_db1.py", line 29, in read
for key, value in db.items(): #read it using the dictionary concept.
File "c:\resource\e32dbm.py", line 116, in items
results=self._query(u"select key,value from data")
File "c:\resource\e32dbm.py", line 67, in _query
line.append(DBV.col(1+j).encode(_dbencoding))
UnicodeError: Latin-1 encoding error: ordinal not in range(256)
Itsmyname
Июнь 8, 2010 08:06:35
Быть может еще при записи нужно декодировать строки?
k=utf('Цапро') и тд
igor.kaist
Июнь 8, 2010 11:42:29
e32dbm понимает только юникод!
mrbloom
Июнь 8, 2010 12:09:59
igor.kaist
e32dbm понимает только юникод!
Ну дык вроде мульти квери и выдает юникод
и вроде он даже в базу записываеться без ошибок
но вот при прочтении выдаеться ошибка
mrbloom
Июнь 8, 2010 12:26:36
ну вот чуток переделал код
терь выдает др ошибку
# -*- coding: UTF-8 -*-
import e32,appuifw,e32dbm #import the module
file_nam = u“e:\\Python\\db3.db” #assign the name of the file to a variable
def utf(s):
return s.decode('utf-8')
def create_new(): #define the write function to write in a database
db = e32dbm.open(file_nam,“nf”) #open the file
db.close()
def write():
db = e32dbm.open(file_nam,“wf”) #open the file
k='Цапро'
v='10'
db=v
k='український'
v='язік'
db=v
k='русская'
v='мова'
db=v
db.close()
def read(): #define a read function to read a database
db = e32dbm.open(file_nam,“rf”)
for key, value in db.items(): #read it using the dictionary concept.
try:
print utf(key), utf(value)
except:
print key,value #C этим вылетает питон системная ошибка(-50)
db.close()
def add():
key,val = appuifw.multi_query(u“name:”, u“value:”)
db = e32dbm.open(file_nam,“wf”)
try:
db=utf(val)
except:
db=val
db.close()
create_new()
write()
read()
#Выдает
##Цапро 10
##русская мова
##український язік
add()
read()#Вылетает с ошибкой приведенной ниже
##
##Traceback (most recent call last):
## File “E:\private\2000b1a5\default.py”, line 81, in menu_action
## f()
## File “E:\private\2000b1a5\default.py”, line 65, in query_and_exec
## execfile(script_list.encode('utf-8'), script_namespace.namespace)
## File “e:\python\simp_db2.py”, line 50, in ?
mrbloom
Июнь 8, 2010 13:01:25
упростил код и кажеться нашел в чем заковыка
Работающий кот:
#Создаем базу
file_nam = u“e:\\Python\\db3.db”
db = e32dbm.open(file_nam,“nf”) #open the file
#####Вбиваем три значения############
key,val = appuifw.multi_query(u“name:”, u“value:”)
print key,val
db=val
key,val = appuifw.multi_query(u“name:”, u“value:”)
print key,val
db=val
key,val = appuifw.multi_query(u“name:”, u“value:”)
print key,val
db=val
#####Вбиваем три значения############
#Читаем все из базы
for key, value in db.items(): #read it using the dictionary concept.
appuifw.note(key, u“info”)
appuifw.note(db, u“info”)
#Закрываем
db.close()
Неработающий кот:
file_nam = u“e:\\Python\\db3.db”
db = e32dbm.open(file_nam,“nf”) #open the file
key,val = appuifw.multi_query(u“name:”, u“value:”)
print key,val
db=val
key,val = appuifw.multi_query(u“name:”, u“value:”)
print key,val
db=val
key,val = appuifw.multi_query(u“name:”, u“value:”)
print key,val
db=val
db.close() #Закрываем
db = e32dbm.open(file_nam,“rf”) #open the file #Открываем для чтения
for key, value in db.items(): #read it using the dictionary concept.
appuifw.note(key, u“info”)
appuifw.note(db, u“info”)
db.close()
Вывод скрипта
Version 1.4.5 final
Р Ш
Рд .
Фм .д
!!!!Когда начинаеться чтение из базы вываливает!!!!
Traceback (most recent call last):
File “E:\private\2000b1a5\default.py”, line 81, in menu_action
f()
File “E:\private\2000b1a5\default.py”, line 65, in query_and_exec
execfile(script_list.encode('utf-8'), script_namespace.namespace)
File “e:\python\simp_db3.py”, line 82, in ?
for key, value in db.items(): #read it using the dictionary concept.
File “c:\resource\e32dbm.py”, line 116, in items
results=self._query(u“select key,value from data”)
File “c:\resource\e32dbm.py”, line 67, in _query
line.append(DBV.col(1+j).encode(_dbencoding))
UnicodeError: Latin-1 encoding error: ordinal not in range(256)
Сдаеться мне что виноват модуль e32dbm
Не должен он так работать