导航:首页 > 编程语言 > pythonurl中文编码

pythonurl中文编码

发布时间:2022-11-20 08:09:37

① 用python怎么解析'%3cp%3e%e5%'

import urllib
rawurl=xxx
url=urllib.unquote(rawurl)

所用模块:urllib
所用函数:urllib.unquote()
案例
import urllib
rawurl = "%E6%B2%B3%E6%BA%90"url = urllib.unquote(rawurl)print url

输出
河源

问题扩展
urllib.unquote()目的是对url编码进行解码,与该函数对应的是编码函数urllib.quote()

123

>>> import urllib>>> urllib.quote("河源")'%E6%B2%B3%E6%BA%90

URL为何要编码、解码?
通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。
例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。
又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。

② python语言中的如何输入编号叫什么

Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正。 一个mole的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明:

# -*- coding=utf-8 -*-或者 #coding=utf-8 其他的编码如:gbk、gb2312也可以; 否则会出现类似:SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared; see http://www.pytho for details这样的异常信息;n.org/peps/pep-0263.html

命令查看脚本默认的编码方式
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>>

2.2 python中的编码与解码

先说一下python中的字符串类型,在python中有两种字符串类型,分别是str和unicode,他们都是basestring的派生类;str类型是一个包含Characters represent (at least) 8-bit bytes的序列;unicode的每个unit是一个unicode obj;所以:

len(u'中国')的值是2;len('ab')的值也是2;

在str的文档中有这样的一句话:The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file. 也就是说在读取一个文件的内容,或者从网络上读取到内容时,保持的对象为str类型;如果想把一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等;

2.2.1 print 语句解释编码问题

print 是打印默认的编码方式,相当于对任何对象encode编码转化成str对象。默认是gbk的编码就是对Unicode进行自动的gbk编码,再按照gbk编码输出。

当print语句碰到一个unicode目标的时候,会用当前python shell环境的默认编码格式首先对unicode对象进行encode(此时unicode对象已经变成了一个str对象了),然后再以默认编码格式为基础,根据其包含的汉字和编码的对应规则,把这个str对象解释成中文并显示出来。但是当print语句碰到的直接是个str目标的时候,就不管其从unicode转到str时用的编码格式是什么,直接用默认编码格式的对应规则来解释成中文。所以,当unicode对象转换成str时的编码格式和print语句的默认编码格式不一致的时候就会出现乱码现象。比如在cmd的python shell里面:

复制代码
复制代码
证明Python 系统默认编码gbk
>>> s= '你好'
>>> s
'\xc4\xe3\xba\xc3'
>>> s = u'你好'
>>> s
u'\xc4\xe3\xba\xc3'
>>> s = '你好'
>>> s
'\xc4\xe3\xba\xc3'
>>> print type(s)
<type 'str'>
>>>unicode 编码打印错误,print 解析字符串而不是Unicode 编码
>>> s = u'你好'
>>> print s
ÄãºÃ
>>>uni = u'你好' #存入一个unicode对象
>>>print uni
你好 #可以正常显示 相当于Unicode.encode(gbk)
>>>uni.encode("gbk")
'\xc4\xe3\xba\xc3' #显示的是个str对象了,如果type(uni.encode("gbk"))得到的就是str对象
>>>print uni.encode("gbk")
你好 #可以正常显示,因为在cmd下的pythonshell里默认个编码格式就是gbk,gbk解析
>>>uni.encode("utf-8")
'\xe4\xbd\xa0\xe5\xa5\xbd' #可以看到,encode用的编码格式不同,编成的字符串也是不同的
>>>print uni.encode("utf-8")
浣犲ソ #乱码,因为用了gbk中汉字和字符串编码格式对应规则去解释了用utf-8编码成的字符串。解释的编码格式不对应。
#######さらに######
>>>print '\xc4\xe3' #自己写出来的这么个字符串(前面不加r)的话也会被print解释成中文,按照编码格式输出

>>>print uni.encode("utf-8").decode("gbk")
浣犲ソ
'''
乱码,而且和上面的乱码一样,这是因为,在uni被utf-8 encode之后,这个对象变成了str对象,是'\xe4\xbd\xa0\xe5\xa5\xbd' 这个。
后来,它又被按照gbk的规则解码,又变回了unicode,但是此时它在内存里的二进制数据已经和最初的uni不一样了。
最初的uni,应该是'\xc4\xe3\xba\xc3'.decode("gbk"),而现在的这个东西,他decode之前的字符串已经变过了。
这么一个东西再拿去print,又把它编码成了gbk格式,相当于前面那步decode没有做,变回了'\xe4\xbd\xa0\xe5\xa5\xbd'。
再解释成汉字,当然就和最开始用uni编码成utf-8格式再解释成汉字的乱码一样了
'''

复制代码

2.2.2 脚本print 打印的正确方式

上面已经证明了系统的默认编码方式是gbk,就是print 最后正确的编码方式应该是gbk

两种解决编码不匹配的情况:

一是明确的指示出 s 的编码方式
# -*- coding: utf-8 -*-
s = '中文'
s.decode('utf-8').encode('gb2312')
二是更改 sys.defaultencoding 为文件的编码方式
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')

三、实践经验中爬取数据的获得

复制代码
# -*- coding: utf-8 -*-
'''
#加油两个字可以很好的比较编码正确和错误
#### 错误的处理方式,
s = "中文"
print s
#这里print就不是输出gbk的编码,是按照头文件utf-8的格式输出
# 结果:中文
print s.decode('utf-8')
#结果中文,s进行解码称为Unicode,print打印就和系统print打印一样自动将Unicode进行
#解码,不用encode编码也能输出,但是最好转化成为字符串输出。
上面实例就是错误使用编码,错误使用编码会出现个别字体的乱码。
'''

'''
要点1、声明头文件# -*- coding: utf-8 -*- 说明所有的代码和中文是utf-8的编码方式
要点2、print输出函数输出到前台cmd中的默认系统编码方式是GBK,
要点3、尽量将Unicode转化成为字符串str (gbk或者utf-8),再去处理。

#unicode 转化成为字符串
s = u'加油'
print s
#结果:加油。原因:系统自动将Unicode升级gbk编码成为字符串,然后系统print 打印gbk
print s.encode('utf-8')
#结果:锷犳补。错误原因:Unicode 编码成为utf-8的字符串形式,但是print打印系统是gbk的,编码冲突。
print s.encode('gbk')
#结果:加油。原因:和print s等价,认为编码了gbk,系统打印
ss = "加油"
print ss
#结果:锷犳补。原因:ss为utf-8的字符串str,print 打印的对应编码字符串是gbk的,所以编码冲突。
print ss.decode('utf-8').encode('gbk')
#结果:加油。原因:ss首先从字符串编码utf-8解码成为unicode,然后进行编码gbk,等价使用print ss.decode('utf-8')。
'''

'''
3.1python中关于中文转换url编码的问题
爬虫的时候我们经常会碰到中文链接编码出现变换的问题,
例如'丽江'中文在url的地址编码却是'%E4%B8%BD%E6%B1%9F',
因此需 要做一个转换。这里我们就用到了模块urllib。
'''
import urllib
data = '丽江'
print data.decode('utf-8').encode('gbk')
#对utf-8的中文编码
print urllib.quote(data)
#那我们想转回去呢?
print urllib.unquote('%E4%B8%BD%E6%B1%9F').decode('utf-8').encode('gbk')

'''
'丽江'在网页编码是gbk的转换码是'%C0%F6%BD%AD',utf-8中的转化码是'%E4%B8%BD%E6%B1%9F',其实是编码问题。
网络的是gbk,其他的一般网站比如google就是utf8的。所以可以用下列语句实现。
'''

#江苏课题的编码转化
import sys,urllib
s = '江苏'
print urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
print urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))

for place in ['南京','无锡','徐州','常州','苏州','盐城','南通','连云港','淮安','盐城','扬州']:
print urllib.quote(place)

####################
#结果:
'''
>>>
丽江
%E4%B8%BD%E6%B1%9F
丽江
%E4%B8%BD%E6%B1%9F
%E6%B6%93%E8%8A%A5%E7%9D%99
>>>
'''

③ python 爬虫中文编码转换出错

importurllib
if__name__=='__main__':
enc=r"%C0%FA%CA%B7%C9%CF%C4%C7%D0%A9%C5%A3%C8%CB%C3%C7.pdf"
string=urllib.unquote(enc).decode('gb2312')
printtype(string),string

这是python2的,简单点。只能帮这么多了。

④ Python3 如何对url解码

url编码:

import urllib

url = 'http://test.com/s?wd=哈哈' #如果此网站编码是gbk的话,需要进行解码,从gbk解码成unicode,再从Unicode编码编码为utf-8格式。

url = url.decode('gbk', 'replace')

print urllib.quote(url.encode('utf-8', 'replace'))

⑤ url编码问题在python中怎么解决

最近在抓取一些js代码产生的动态数据,需要模拟js请求获得所需用的数据,遇到对url进行编码和解码的问题,就把遇到的问题总结一下,有总结才有进步,才能使学到的知识更加清晰。对url进行编码和解码,python提供了很方便的接口进行调用。

url中的query带有特殊字符(不是url的保留字)时需要进行编码。当url中带有汉字时,需要特殊的处理才能正确编码,以下都只针对这种情形,当然也适用于纯英文字符的url。

(1) url编码:

import urllib

url = 'wd=哈哈' #如果此网站编码是gbk的话,需要进行解码,从gbk解码成unicode,再从Unicode编码编码为utf-8格式。

url = url.decode('gbk', 'replace')

print urllib.quote(url.encode('utf-8', 'replace'))

结果: 3a%2f%2ftest.com%2fs%3fwd%3d%e5%93%88%e5%93%88

(2) url解码:

import urllib

encoded_url = est.com%2fs%3fwd%3d%e5%93%88%e5%93%88'

print urllib.unquote(encoded_url).decode('utf-8', 'replace').encode('gbk', 'replace') #反过来

函数调用的参数以及结果都是utf-8编码的,所以在对url编码时,需要将参数串的编码从原始编码转换成utf-8,

对url解码时,需要将解码结果从utf-8转换成原始编码格式。

依据网站采用的编码不同,或是gbk或是utf-8,赋赋予不同的编码,进行不同的url转码。GBK格式,一个中文字符转为%xx%xx,共两组;utf-8格式,一个中文字符转为%xx%xx%xx,共三组。

⑥ python url编码两次怎么结

面是中文的情况(比如‘丽江'),url的地址编码却是'%E4%B8%BD%E6%B1%9F',因此需 要做一个转换。这里我们就用到了模块urllib。
?

1
2
3
4
5
6
7
8

>>> import urllib
>>> data = '丽江'
>>> print data
丽江
>>> data
'\xe4\xb8\xbd\xe6\xb1\x9f'

⑦ python字符串与url编码的转换实例

python字符串与url编码的转换实例
今天小编就为大家分享一篇python字符串与url编码的转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要应用的场景
爬虫生成带搜索词语的网址

1.字符串转为url编码
import urllib
poet_name = "李白"
url_code_name = urllib.quote(poet_name)
print url_code_name
#输出
#%E6%9D%8E%E7%99%BD

2.url编码转为字符串
import urllib
url_code_name = "%E6%9D%8E%E7%99%BD"
name = urllib.unquote(url_code_name)
print name
#输出
#李白
以上这篇python字符串与url编码的转换实例就是小编分享给大家的全部内容了篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助

⑧ 前端是vue,后台用的python。前台get请求url中有中文,后台看到链接地址变成了乱码

传递之前先把汉字跟标点符号之类转成urlcode
js代码

encodeURIComponent("哈哈哈哈哈");
输出"%E5%93%88%E5%93%88%E5%93%88%E5%93%88%E5%93%88"

py代码使用urllib将urlcode编码解码

from urllib import parse
get = "%E5%93%88%E5%93%88%E5%93%88%E5%93%88%E5%93%88"
print(parse.unquote(get))
输出"哈哈哈哈哈"

阅读全文

与pythonurl中文编码相关的资料

热点内容
java流程处理 浏览:683
ftp创建本地文件夹 浏览:657
腰椎第一节压缩 浏览:738
xp去掉加密属性 浏览:117
2345怎么压缩文件 浏览:982
迷你夺宝新算法 浏览:407
服务器如何防止木马控制 浏览:715
压缩空气用电磁阀 浏览:742
微信为什么不能设置加密认证 浏览:672
邓伦参加密室逃脱视频 浏览:391
音频压缩编码标准 浏览:300
常提到的app是表示什么 浏览:261
天津程序员传销 浏览:349
下班之后的程序员 浏览:73
检测支持ssl加密算法 浏览:344
衢州发布新闻什么APP 浏览:85
中国移动长沙dns服务器地址 浏览:251
wifi密码加密了怎么破解吗 浏览:598
linux命令cpu使用率 浏览:70
linux实用命令 浏览:241