python - 求助为什么 linux 的编码这么难搞?

 爱吃肉肉的狼 发布于 2022-10-28 09:23
coding=utf-8 import re import urllib.request html = urllib.request.urlopen("http://study.163.com/").read().decode('utf-8') print(type(html)) print(html)

报错 UnicodeEncodeError: 'ascii' codec can't encode characters in position 595-599: ordinal not in range(128) 如果不出现中文可以输出,出现中文就报错, windows 就没有这个问题。 请问下如何解决? 谷歌能搜的搜了。。

4 个回答
  • haofly说的可能是对的,在控制台不应该会出现这个问题。因为linux下控制台编码是utf-8,而你的代码在收到网页内容后已经将代码decode为unicode了,控制台输出时会按utf-8对unicode进行编码输出。

    针对你的这种情况,有两种解决方案,一种是输出时直接输出str而不是unicode。

    import urllib2
    html = urllib2.urlopen('http://study.163.com').read()
    print type(html)
    print html

    另一种是彻底重载str<->unicode转换时使用的编码方案:

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    import urllib2
    html = urllib2.urlopen('http://study.163.com').read().decode('utf-8')
    print type(html)
    print html
    2022-10-29 13:31 回答
  • 源编码不匹配的问题

    import urllib2
    import chardet

    response_body=urllib2.urlopen("http://study.163.com/").read()
    print response_body.decode((chardet.detect(response_body))['encoding']).encode('utf-8')

    2022-10-29 13:35 回答
  • decode('utf-8') 前加encode('gbk') 即可

    2022-10-29 13:41 回答
  • 是你的用的编辑器的问题吧,我在atom里面执行的时候会出现这个错误,是因为编辑器的输出编码问题,而在terminal则没有这个问题

    2022-10-29 13:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有