吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1293|回复: 7
收起左侧

[讨论] 【Python】GBK解码问题

[复制链接]
HzHappy 发表于 2021-5-7 21:08
最近因为工作上的需要,自己用python做了一个文字处理程序,但在处理输入端传入的GBK编码的XML文档时,由于XML解析器只认UTF-8编码,因此需要将GBK字节流转换为UTF-8格式。
问题就在这个地方:由于输入端的GBK字节流里有一些无法被GBK解码器解码的字节(形如\xa0\xaa),导致解码器进行解码的时候会直接报UnicodeDecodeError,然后就无法继续进行下一步。在此想询问有什么比较好的解决方法,识别字节流中不被支持的字节并予以去除?
我目前用的简单解决方案是这样的,最后的outstr就是输出的字符串了,但是这个解决方案会发生一些奇怪的问题,比如多出了一些不必要的符号。
[Python] 纯文本查看 复制代码
instr = b'{GBK_Bytes}'
# 假设instr是GBK编码的字节流
while True:
 try:
   outstr = instr.decode('GBK')
   break
 except UnicodeDecodeError as e:
   instr = instr[:e.args[2]] + instr[e.args[3]:]

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
末轨 + 1 + 1 热心回复!
Jedis + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

生虢 发表于 2021-5-7 21:26
虽然是个看起来微不足道的问题 但是还是非常有用的 感谢楼主分享
KunGe. 发表于 2021-5-7 21:52
fanvalen 发表于 2021-5-7 22:17
我比较奇怪的是一个文件能储存两种编码的字符而不丢失
我的想法是文件始终只有一种编码
只是每次打开的文件编码不一样
一会是gbk 一会是utf-8
所以只用一种编码来打开另一种编码就error
所以我的方法是
#使用可能的编码进行打开(gbk,gb2312,gb18030,BIG5,ISO-8859-1,UTF-8,UTF-8-sig)
#全部转码成统一的utf-8
具体代码encode和decode看看doc




fanvalen 发表于 2021-5-7 22:27
xa0 xaa这类是ISO-8859-1编码
6767 发表于 2021-5-8 00:09
不知道你用的是啥xml解析器,
我用lxml一直很顺滑,
see https://lxml.de/api/lxml.etree.XMLParser-class.html
https://lxml.de/parsing.html
非常多的资料...
[Python] 纯文本查看 复制代码
parser = etree.XMLParser(encoding='gbk') #这里还可以传入很多参数来定制你的parser
tree = etree.parser(file, parser=parser)
JOB123 发表于 2021-5-8 00:17
读取 bytes流,编码为gbk,并设置非法字符ignore即可
 楼主| HzHappy 发表于 2021-5-8 08:04
本帖最后由 HzHappy 于 2021-5-8 08:05 编辑
fanvalen 发表于 2021-5-7 22:17
我比较奇怪的是一个文件能储存两种编码的字符而不丢失
我的想法是文件始终只有一种编码
只是每次打开的文 ...

这个程序的输入端提取的字节流是服务端传输过来的,客户端浏览器将不认识的字节全部处理成英文的?了,后期溯源的时候找到了服务端提取文字所用的Excel表格,Excel表格里就有这些\xa0\xaa(在Python调试的时候,利用openpyxl调出来的)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 03:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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