UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xa0‘ in position 21: illegal multibyte sequ

关于python的pywinaotu库print_control_identifiers()因为获取内容有'\xa0'而报错

报错内容:

UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 21: illegal multibyte sequ

看了相关报错解决方案,大概问题和解决方案如下:

 意思是将Unicode字符编码转为GBK时候出现了问题,可能是本身Unicode类型的字符中,包含了一些无法转换为GBK编码的一些字符;

所以我头脑中萌生出的第一种解决办法是把那些无法转换为GBK编码的字符给删了,转换不了的字符在报错中也说明了是’\xa0‘这个东西。于是我就修改了下代码。

原文链接:https://blog.csdn.net/qq_26082507/article/details/121537594

我出现这个报错是在使用pywinaotu这个库的print_control_identifiers()获取控件信息时,添加了filename的参数报错控件为txt文件是出现的。

print_control_identifiers(filename=r'D:/xxx/xxx/xxx.txt')

报错信息如下 :

UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 21: illegal multibyte sequence

 解决方案:

一开始更改源库的保存编码都还是报这个错误。后面看到某博主分享的解决方案大概能知道怎么修改这个bug。

使用print_control_identifiers()获取控件信息时即使有‘\xa0’也不会报错,也能正常显示出来。

就是在print_control_identifiers(filename=r'D:/xxx/xxx/xx.txt')添加了filename这个参数之后会报错,通过更改源库写入数据时的这个数据进行replace更改写入的数据。

更改的文件是codecs.py

    def write(self, data):
        return self.writer.write(data)

更改为:

    def write(self, data):
        return self.writer.write(data.replace(u'xa0', u' ').replace('\xa0', "\n"))

之后再运行print_control_identifiers(filename=r'D:/xxx/xxx/xx.txt')保存获取的控件信息也不会报错了。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值