鱼C论坛

 找回密码
 立即注册
查看: 746|回复: 3

请问用decode和ignore后依然报错的原因是什么

[复制链接]
发表于 2018-10-5 00:16:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import urllib.request as U_R
import chardet
with open('urls.txt') as f:
    i = 0
    for eachline in f:
        print(eachline)
        i+=1
        file_name = 'url_'+str(i)+'.txt'
        response = U_R.urlopen(eachline).read()
        url_dict = chardet.detect(response)
        print(url_dict)
        response = response.decode(url_dict['encoding'],'ignore')
        with open(file_name,'w') as f1:
            f1.write(response)
报错:
Traceback (most recent call last):
  File "C:/Users/Thomas Lai/Desktop/python/HW53/control.py", line 14, in <module>
    f1.write(response)
UnicodeEncodeError: 'gbk' codec can't encode character '\xe4' in position 1037: illegal multibyte sequence
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-5 01:02:07 | 显示全部楼层
呃,兄弟你有没有想过 chardet.detect 是怎么运行的啊?代码并不像你想的那么智能,有时候轮子也不是很好用,你可以写个判断语句,confience在多少多少以上的时候再使用,其实用正则,或者解析工具找到网页作者自身编写的编码格式比较好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-5 10:46:25 | 显示全部楼层
RIXO 发表于 2018-10-5 01:02
呃,兄弟你有没有想过 chardet.detect 是怎么运行的啊?代码并不像你想的那么智能,有时候轮子也不是很好用 ...

我发现是二进制问题,我想把二进制译成字符的东西然后直接用文本保存该怎么做?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-5 14:11:38 | 显示全部楼层
爱学习的喵 发表于 2018-10-5 10:46
我发现是二进制问题,我想把二进制译成字符的东西然后直接用文本保存该怎么做?

兄弟,我猜你用的是python3
在3里面只有     字符串      bytes 类型    你想讲的应该是这个把,如果你是想说 把 01010   转成对应的字符,那么基本上的编码都能转。。。。
字符串转Bytes就是encode,bytes转字符串就是decode,这里的字符串代表unicode, bytes代表的是其他编码,不过还有个问题就是你显示的编辑器用的编码,windows默认用utf-8,因为unicode兼容utf-8所以可以显示,你之所以觉得是二进制问题,我感觉是不是你百度了 \xe4 是个什么东西。。。。其实,你随便打个中文字符串   encode('gbk')都是会出现 b'\x23\d22'   之类的字节码,算了,你还是自己去琢磨把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 11:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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