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

本文介绍了如何处理Python WinRM库返回数据的编码问题。通过使用`chardet`库检测到数据编码为Windows-1254,针对Turkish语言。接着,修改winrm源码,将`codepage`参数从437改为936,以适应GBK编码。最后,使用`gbk`解码返回数据,成功解析返回的内容。
摘要由CSDN通过智能技术生成

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. 再次查看返回的数据编码

输出的字符编码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值