Найти - Пользователи
Полная версия: e32dbm и русский язык в GUI (в продолжении поста о кирилице)
Начало » Mobile Python » e32dbm и русский язык в GUI (в продолжении поста о кирилице)
1
mrbloom
В продолжение поста 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
Быть может еще при записи нужно декодировать строки?
k=utf('Цапро') и тд
igor.kaist
e32dbm понимает только юникод!
mrbloom
igor.kaist
e32dbm понимает только юникод!
Ну дык вроде мульти квери и выдает юникод
и вроде он даже в базу записываеться без ошибок
но вот при прочтении выдаеться ошибка
mrbloom
ну вот чуток переделал код
терь выдает др ошибку

# -*- 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
упростил код и кажеться нашел в чем заковыка
Работающий кот:
#Создаем базу
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
Не должен он так работать
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