5.0 的无言问题
-
我尝试把 4.x 开发的模块移植到 5.0,结果遇到了一个很无言的问题:
我在视图(表单)定义文件使用了中文作为表单的标题,视图定义的 xml 文件使用的是 utf-8 编码,结果出现:
binosvorm.py", line 1049, in fields_view_get
doc = dom.minidom.parseString(result['arch'].encode('utf-8'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 54: ordinal not in range(128)查看代码:
server/bin/osv/orm.py:
1049: doc = dom.minidom.parseString(result['arch'].encode('utf-8'))我糊涂了,请熟悉 python 的同学出来科普一下 python 的字符串和 unicode 操作的相关知识
-
-
你的这个模块在v5上安装,到最后会出现“UnicodeEncode Error", 但实际上这个模块是安装成功的,可以使用。
出现encode错误是因为,你的模块没有设置Access Rule。在V5的版本中对没有设置Access Rule的模块会有一个警告信息。因为在smshleper.py中的smshelper_message_template对象的_description是中文,当logger在记录前面提到的警告信息时,就出现了转码错误。这也是安装在V4中没问题而在V5中不行的原因。
将server/bin/netsvc.py的242行左右的地方,将下面的代码[code] result = str(msg).strip().split('n')
[/code]之前加上:[code] if isinstance(msg, unicode):
msg = msg.encode(sys.getfilesystemencoding())
[/code]试试。或将前面提到的_description中的说明改成英文。[[i] 本帖最后由 digitalsatori 于 2008-12-26 21:50 编辑 [/i]]