鱼C论坛

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

pythion中文编码问题

[复制链接]
发表于 2017-11-6 09:08:05 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
#coding=utf-8

import requests

url = 'http://www.xiaohuar.com/2014.html'
header = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=header,timeout=30)
html = r.text
print type(html)
print '\n'
print html[:1000]
print '\n\n'
print r.encoding
print r.apparent_encoding

返回结果:
<type 'unicode'>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>2015&#196;ê&#180;ó&#209;§&#208;&#163;&#187;¨&#197;&#197;&#208;&#208;°&#241;100&#199;&#191;</title>

<meta http-equiv="Cache-Control" content="no-transform" />

<meta http-equiv="Cache-Control" content="no-siteapp" />

<meta name="keywords" content="&#180;ó&#209;§&#208;&#163;&#187;¨,&#184;&#223;&#208;&#163;&#208;&#163;&#187;¨,&#208;&#163;&#187;¨&#197;&#197;&#208;&#208;,&#208;&#163;&#187;¨&#205;&#248;,&#208;&#163;&#187;¨">

<meta name="description" content="2015&#214;&#208;&#185;ú&#180;ó&#209;§&#208;&#163;&#187;¨&#197;&#197;&#208;&#208;°&#241;&#199;°100&#199;&#191;&#163;&#172;&#191;&#180;&#191;&#180;&#196;&#227;&#209;§&#208;&#163;&#181;&#196;&#208;&#163;&#187;¨&#200;&#203;&#198;&#248;&#211;&#208;&#182;à°&#244;&#163;&#172;&#191;ì&#192;&#180;&#184;&#248;&#196;&#227;&#207;&#178;&#187;&#182;&#181;&#196;&#208;&#163;&#187;¨&#205;&#182;&#201;&#207;&#210;&#187;&#198;±°&#201;&#163;&#172;&#214;&#208;&#185;ú&#180;ó&#209;§&#208;&#163;&#187;¨&#197;&#197;&#208;&#208;°&#241; TOP100&#208;&#194;&#207;&#202;&#179;&#246;&#194;&#175;&#163;&#172;2015&#196;ê&#200;&#171;&#185;ú&#208;&#163;&#187;¨&#197;&#197;&#208;&#208;°&#241;&#163;&#172;±&#190;&#213;&#190;&#198;&#192;&#209;&#161;±&#190;&#213;&#190;&#205;¨&#185;&#253;&#205;&#182;&#198;±&#189;&#171;&#198;&#192;&#209;&#161;&#179;&#246;&#161;&#182;2015&#196;ê&#208;&#163;&#187;¨&#197;&#197;&#208;&#208;°&#241;&#161;·">

<link rel="stylesheet" type="text/css"  />

<script type="text/javascript" src="http://www.xiaohuar.com/skin/default/js/jquery-1.4.2.min.js"></script>

<SCRIPT type=text/javascript src="http://www.xiaohuar.com/skin/default/js

ISO-8859-1
GB2312

可以看出html使用gb2312编码的,于是对代码改进:
#coding=utf-8

import requests

url = 'http://www.xiaohuar.com/2014.html'
header = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=header,timeout=30)
html = r.text.encode('GB2312')
print type(html)
print '\n'
print html[:1000]

报错:
UnicodeEncodeError: 'gb2312' codec can't encode character u'\xc4' in position 259: illegal multibyte sequence

请问:应该如何解决,以及为何使用GB2312不可行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-6 09:19:25 | 显示全部楼层
换python3阿
你搞不懂编码知识,又偏要在烂泥坑里挣扎,有什么意义呢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 20:34:38 | 显示全部楼层
#coding=utf-8

import requests

url = 'http://www.xiaohuar.com/2014.html'
header = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=header,timeout=30)
r.encoding = 'gb2312'
html = r.text
print type(html)
print '\n'
print html[:1000]
print '\n\n'
print r.encoding
print r.apparent_encoding

requests模块,在请求的时候,Response会自动识别网站的编码方式,如果识别失败就会启用ISO-8859-1编码方式
我们可以通过response.encoding属性来自己手动指定编码方式,常设置为utf-8的编码方式,但是这次有的字符无法做到有效的显示

经查看源码,发现网站用的是gb2312的编码方式,于是设置为gb2312的编码方式

TIM截图20171106202912.png

运行的时候请用ide来用运行,不要在cmd下运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 20:36:06 | 显示全部楼层
TIM截图20171106203549.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 04:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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