解决GAE数据库保存时的编码问题

最近业余时间在gae上写了个程序,以统一使用及管理我在各个地方各个浏览器的书签

 

深蓝在线书签http://deepbluebookmark.appspot.com/

 

遇到一个编码的问题

 

gae数据库中的db.StringProperty字段类型只有当传入的值时是unicode类型的时候才能正常保存

 

因为保存的时候对传入的值进行了unicode(value).encode("utf-8")操作

 

系统缺省的encoding是ascii

那么当vlaue中含有非ascii类型的字符时就会报错

 

搜索一下,网上有这样的解决方案

     code = sys.getdefaultencoding()

     if code != 'utf8':

         reload(sys)

         sys.setdefaultencoding('utf8')

 

但不是很好用,第一次访问的时候都会出错

系统默认编码的改变肯定对已经运行的程序有影响

 

然后想干脆全部都使用unicode编码好了,然而从数据库查询出的结果却又是str类型,

结果还是存在编码的问题

 

没有办法,只有自己定义一个字段类型以能在赋值的时候自动把值转为unicode

 class StringProperty(db.StringProperty):

  def __set__(self, model_instance, value):

    if value != None:

        if not isinstance(value,unicode):

            value = value.decode("utf-8")

    db.StringProperty.__set__(self,model_instance,value)

 

很希望gae能直接支持utf-8编码

你可能感兴趣的:(数据库)