最近业余时间在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编码