51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2295|回复: 0
打印 上一主题 下一主题

robotframework中文显示乱码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-6-21 13:14:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
问题描述:接口、数据库返回信息有中文的时候会显示unicode的样式,如图



解决方法:

1、robotframework为3.0.X

2、找到Python安装目录下的\Lib\site-packages\robot\utils\unic.py文件

引入json库:import json

将下面代码复制到如图位置,注意对齐方式

if isinstance(item, (list, dict, tuple)): try: item = json.dumps(item, ensure_ascii=False, encoding='cp936')
except UnicodeDecodeError: try: item = json.dumps(item, ensure_ascii=False, encoding='cp936') except: pass except: pass



扩展:其中的cp936可用utf-8或者gbk编码格式去替换

也可以下载unic.py文件替换掉

下载地址:unic.py

复制代码
  1. <p>#  Copyright 2008-2015 Nokia Networks</p><p>#  Copyright 2016-     Robot Framework Foundation</p><p>#</p><p>#  Licensed under the Apache License, Version 2.0 (the "License");</p><p>#  you may not use this file except in compliance with the License.</p><p>#  You may obtain a copy of the License at</p><p>#</p><p>#      http://www.apache.org/licenses/LICENSE-2.0</p><p>#</p><p>#  Unless required by applicable law or agreed to in writing, software</p><p>#  distributed under the License is distributed on an "AS IS" BASIS,</p><p>#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</p><p>#  See the License for the specific language governing permissions and</p><p>#  limitations under the License.</p><p>
  2. </p><p>from pprint import PrettyPrinter</p><p>
  3. </p><p>from .platform import IRONPYTHON, JYTHON, PY2</p><p>from .robottypes import is_bytes, is_unicode</p><p>import json</p><p>
  4. </p><p>if PY2:</p><p>
  5. </p><p>    def unic(item):</p><p>        if isinstance(item, unicode):</p><p>            return item</p><p>        if isinstance(item, (bytes, bytearray)):</p><p>            try:</p><p>                return item.decode('ASCII')</p><p>            except UnicodeError:</p><p>                return u''.join(chr(b) if b < 128 else '\\x%x' % b</p><p>                                for b in bytearray(item))</p><p>                                </p><p>        if isinstance(item, (list, dict, tuple)):</p><p>            try:</p><p>                item = json.dumps(item, ensure_ascii=False, encoding='utf-8')</p><p>            except UnicodeDecodeError:</p><p>                try:</p><p>                    item = json.dumps(item, ensure_ascii=False, encoding='gbk')</p><p>                except:</p><p>                    pass</p><p>            except:</p><p>                pass</p><p>        try:</p><p>            try:</p><p>                return unicode(item)</p><p>            except UnicodeError:</p><p>                return unic(str(item))</p><p>        except:</p><p>            return _unrepresentable_object(item)</p><p>
  6. </p><p>else:</p><p>
  7. </p><p>    def unic(item):</p><p>        if isinstance(item, str):</p><p>            return item</p><p>        if isinstance(item, (bytes, bytearray)):</p><p>            try:</p><p>                return item.decode('ASCII')</p><p>            except UnicodeError:</p><p>                return ''.join(chr(b) if b < 128 else '\\x%x' % b</p><p>                               for b in item)</p><p>        try:</p><p>            return str(item)</p><p>        except:</p><p>            return _unrepresentable_object(item)</p><p>
  8. </p><p>
  9. </p><p># JVM and .NET seem to handle Unicode normalization automatically. Importing</p><p># unicodedata on Jython also takes some time so it's better to avoid it.</p><p>if not (JYTHON or IRONPYTHON):</p><p>
  10. </p><p>    from unicodedata import normalize</p><p>    _unic = unic</p><p>
  11. </p><p>    def unic(item):</p><p>        return normalize('NFC', _unic(item))</p><p>
  12. </p><p>
  13. </p><p>def prepr(item, width=400):</p><p>    return unic(PrettyRepr(width=width).pformat(item))</p><p>
  14. </p><p>
  15. </p><p>class PrettyRepr(PrettyPrinter):</p><p>
  16. </p><p>    def format(self, object, context, maxlevels, level):</p><p>        try:</p><p>            if is_unicode(object):</p><p>                return repr(object).lstrip('u'), True, False</p><p>            if is_bytes(object):</p><p>                return 'b' + repr(object).lstrip('b'), True, False</p><p>            return PrettyPrinter.format(self, object, context, maxlevels, level)</p><p>        except:</p><p>            return _unrepresentable_object(object), True, False</p><p>
  17. </p><p>
  18. </p><p>def _unrepresentable_object(item):</p><p>    from .error import get_error_message</p><p>    return u"<Unrepresentable object %s. Error: %s>" \</p><p>           % (item.__class__.__name__, get_error_message())</p>
复制代码

复制代码


修改后运行脚本显示结果如下:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-23 09:27 , Processed in 0.064770 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表