同一个论坛的页面,为什么编码转换不一致?

2016-08-31 21:53:45 +08:00
 omg21
我在爬取一个论坛的页面的时候,遇到一个问题:有个别页面没法转码。
比方说论坛的列表页,我要爬取 10 页,然后转成 Unicode 码,保存下来,大部分页面都是正常的,但是会有两个页面没有转成 Unicode 。但是这 10 个页面都是可以取到数据的,现在问题就出在转码上。我很奇怪,这 10 个页面头部都是下面的代码,都是用的 gbk 编码。为什么有的没法转换。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=gbk" />

我用下面的语句进行转换
def encoding(bm):
types = ['utf-8','utf-16','gb2312','gbk']
printtxt(bm)
for type in types:
try:
return bm.decode(type) #我把这里的 type 换成'gbk'后,该能转换的还能转换,那两个还是没有转成。
except:
pass

为什么 10 个页面都是一样的,有的能转成,有的转不成呢?
1956 次点击
所在节点    Python
7 条回复
purrgil
2016-08-31 22:27:58 +08:00
可能是有某些已经乱码或者本身是特殊字符。
kanezeng
2016-08-31 22:50:46 +08:00
把有问题的页面保存下来,手动转换了看看啊
yangg
2016-08-31 23:14:56 +08:00
取 meta 而不是一个个试,然后加上转换不报错参数
jswxg
2016-09-01 08:21:15 +08:00
bm.decode(type, 'ignore') 试试
omg21
2016-09-01 18:52:07 +08:00
@jswxg 试过了,不是 ignore 这个问题
omg21
2016-09-01 18:55:38 +08:00
@purrgil 你说的对,我对整个页面排查后,发现有一个字符\xa4h 无法编译,为什么确定是这个字符,因为它前后的字符都能正常转换,只要加上它就报错,在网站上这个字符的位置显示的是个方框,不知道这种情况怎么处理。
我有心想把这个字符删掉,可是其他页面也有没法转码的情况,而且是不同的字符,这要一点点删除不现实。
purrgil
2016-09-02 06:46:04 +08:00
@omg21 windows 下的 CMD 默认只能显示 GBK 范围内的字符。很多字符无法显示。
python 的 IDLE 好像也不能完整显示所有的 unicode 字符。

所以转换前后不要输出到终端。
可以考虑写到 HTML 里。用 chrome 之类的浏览器打开。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX