解决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编码

原文地址:https://www.cnblogs.com/yashen/p/1881717.html