鱼C论坛

 找回密码
 立即注册
查看: 2588|回复: 7

[已解决]关于读取不同html文件出现的编码问题

[复制链接]
发表于 2019-10-16 21:43:08 | 显示全部楼层 |阅读模式
15鱼币
  1. data = open('123.html','r',encoding = 'utf-8')
  2. print(data)

  3. for line in data:
  4.     print(line)
复制代码



这里编码为utf-8读取个别html文件,没有问题,但是读取其他html文件报错如下(例如123.html):
  File "D:\python37\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 317: invalid continuation byte

若是将utf-8去掉这时读取没有问题,但是前期可以读取的html又报以下错误
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 178: illegal multibyte sequence

问题:想求助有没有什么编码转换的办法或其他方法读取不同类型html文件,不会报错
最佳答案
2019-10-16 21:43:09
本帖最后由 XiaoPaiShen 于 2019-10-17 00:30 编辑
  1. import chardet

  2. with open('123.html', 'rb') as file:
  3.     rawdata = file.read()
  4.     result = chardet.detect(rawdata)
  5.     charenc = result['encoding']
  6.     print(charenc)
  7.     print(rawdata.decode(charenc))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-16 21:43:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 XiaoPaiShen 于 2019-10-17 00:30 编辑
  1. import chardet

  2. with open('123.html', 'rb') as file:
  3.     rawdata = file.read()
  4.     result = chardet.detect(rawdata)
  5.     charenc = result['encoding']
  6.     print(charenc)
  7.     print(rawdata.decode(charenc))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-16 22:08:06 | 显示全部楼层
data = open('123.html','r',encoding='ascii', errors='ignore')
print(data)

for line in data:
    print(line)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-16 23:57:30 | 显示全部楼层
本帖最后由 immotral 于 2019-10-17 00:07 编辑

我之前也遇到过这样的问题,查了网页上的内容。python自带的文件类型编码函数输出类型
https://blog.csdn.net/LeonTom/article/details/85164998(常见的可用)。只有当"rb”,不加encoding时候才能正常输出。
你可以尝试一下,好像不怎么可以。
(我是这样理解的,python自带的库是没有所有的字节码类型的库的,所以它在解析的时候回不认识和解析错。
这个可以比喻成海洋里的动物,大多是动物你之前是不了解的,但是叫你分类,所以你就不知道了)
我尝试过上面的方法,有次吧一个文件,python查看其编码类型,但是却解析成非洲某某国的文字类型(百度了它的输出提示),
显然不是。你可以去找些私人公司的什么python库,引用什么的可以,但我是没找到所有的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-17 09:03:06 | 显示全部楼层
打开一个陌生得文本文件  需要先判断它得编码类型  这是python得一个特色
除非你百分之百确定它就是utf8 或者其他得gbk神马得
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-17 17:38:19 From FishC Mobile | 显示全部楼层
kaohsing 发表于 2019-10-16 22:08
data = open('123.html','r',encoding='ascii', errors='ignore')
print(data)


只识别ascii编码文件,其他类型文件都忽略掉么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-17 17:38:50 From FishC Mobile | 显示全部楼层
XiaoPaiShen 发表于 2019-10-16 23:50

获取文件的编码类型?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-17 18:22:27 | 显示全部楼层
xue11 发表于 2019-10-17 17:38
获取文件的编码类型?

html不是有 <meta http-equiv="Content-Type" content="text/html; charset=gbk" /> 告诉你它是什么编码的吗?
try:
    utf-8不行
except:
    gbk

这样不行吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 13:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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