关于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')保存获取的控件信息也不会报错了。