【python】怎么解决使用pywinrm返回的中文数据乱码

1. 首先使用chardet查看返回的数据编码

import chardet
print(chardet.detect(return_data))

查看打印,可以发现该串字符编码是“Windows-1254”,语言是“Turkish”(离谱)
输出的字符编码

2. 修改winrm源码

查看winrm源码(一般在python->Lib->site-packages下,文件夹名为winrm),在其中protocol.py文件中可以看到以下两段代码

第一段代码

    def open_shell(self, i_stream='stdin', o_stream='stdout stderr',
                   working_directory=None, env_vars=None, noprofile=False,
                   codepage=437, lifetime=None, idle_timeout=None):

将其中的codepage=437改成codepage=936

第二段代码

        if isinstance(stdin_input, text_type):
            stdin_input = stdin_input.encode("437")

同理,将其中的437改为936即可

3. 解析返回的数据

winrm = winrm.Session(ip + ':5985', auth=(username, password))
return_data = winrm.run_cmd(command)
return_data = return_data.std_out.decode('gbk') # 当IBM发明代码页时,把GBK放在了第936页,所以它被称为CP936,因此在这里要用gbk去解析

4. 再次查看返回的数据编码

输出的字符编码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值