代码内容:

url = 'https://movie.douban.com/j/search_subjects?type=movie'+ str(tag) + '&sort=recommend&page_limit=20&page_start=' + str(limit)
response = urllib.request.urlopen(url, timeout=20)
result = response.read().decode('utf-8','ignore').replace(u'\xa9', u'')
result = json.loads(result)

  

错误内容为:上述第二行代码报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 28-29: ordinal not in range(128)

1 认为是代码错误,或者是tab缩进错误

2 百度搜索后得出如下分析:

Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式。

但是在我使用的python3.6.5 默认就是utf8编码格式,所以也不存在这种问题。我使用print(type(str))后输出的也是str。

3 发现python3 urlopen()链接地址中不能出现中文,而上述代码的tag是传入的中文字符,终于找到了问题的所在。

解决办法:

使用urllib.parse.quote进行转换。

url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=' + str(tag) + '&sort=recommend&page_limit=20&page_start=' + str(limit)
url = quote(url, safe=string.printable)
response = urllib.request.urlopen(url, timeout=20)
result = response.read().decode('utf-8','ignore').replace(u'\xa9', u'')
result = json.loads(result)

  

程序头部需要添加

from urllib.parse import quote

同时需要import string导入string模块

方法quote的参数safe表示可以忽略的字符。

string.printable表示ASCII码第33~126号可打印字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余的是一些标点符号、运算符号等。

如果去掉safe参数的内容将会出错。
---------------------
作者:xjtu帽帽
来源:CSDN
原文:https://blog.csdn.net/qq_25406563/article/details/81253347
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. javascript_core_05之正则表达式
  2. 如何自己编写一个easyui插件续
  3. LDA-math-文本建模
  4. HDU5643-King's Game
  5. 抽空通过简书网学习了一下console,感觉高大上!
  6. JavaScript基础——变量、语句、注释
  7. JSP自定义标签就是如此简单
  8. 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
  9. docker上配置mysql主从复制
  10. MinTTY终端模拟器要点
  11. Confluence安装部署
  12. CentOS7安装redis数据库及php-redis扩展
  13. No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage
  14. MySQL事务提交过程(一)
  15. POJ2480 Longge's problem
  16. 对 Service中sqlsession对象的优化
  17. <NET CLR via c# 第4版>笔记 第18章 定制特性
  18. LVS原理以及配置
  19. python作业之修改用户配置文件
  20. js将UTC时间转化为当地时区时间(UTC转GMT)

热门文章

  1. [日常] Go语言圣经--接口约定习题2
  2. git从入门到放弃
  3. 批量导出VBA工程中的Source
  4. Selenium使用总结(Java版本)
  5. Graveyard(poj3154)
  6. The area (hdu1071)积分求面积
  7. 【JavaFx教程】第三部分:与用户的交互
  8. RabbitMQ安装教程
  9. zookeeper3.4.5+Hbase1.2.6安装教程
  10. @Transactional事务不起作用原因