python编程中中文输出乱码UnicodeEncodeError: 'ascii' codec can't encode character

我用的jupyter,下图是我的源代码我知道由于未把ASCII转为utf8,但是我按照网上的代码修改后直接没有output了,求大神指导!
我加上
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
还是没反应

楼主你好!

其实按照你的代码的逻辑来做是没有错的,无法显示成utf-8编码的文本其实是因为在request请求的时候,按照网页的标识转了码,接着BeautifulSoup把已经是utf-8的文本又强转了一次utf-8编码,导致了无法正确的显示,以想要拿到的时间为例,其实程序的目标字符串应该如下:

# -*- coding: utf-8 -*-

'''我们想要使用的字符串'''
target_str = '2017\xe5\xb9\xb402\xe6\x9c\x8816\xe6\x97\xa512:53'

'''两次转码后的字符串'''
get_str = u'2017\xe5\xb9\xb402\xe6\x9c\x8816\xe6\x97\xa512:53'


归根结底是两个对象的类不同,但python不支持这两种类型的强转,个人想了个比较临时的解决方案,算是个python打了个补丁,就是将字符串转成二进制,再转回字符串,这样就unicode就不用给他加上编码方式再转成二进制字符串了,修改后的代码如下:

# -*- coding: utf-8 -*-
import requests
from bs4        import BeautifulSoup
from datetime   import datetime

def encode(s):
    '''将字符串转成二进制'''
    return ' '.join([bin(ord(c)).replace('0b', '') for c in s])

def decode(s):
    '''将二进制转换成字符串'''
    return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])

res = requests.get('
)
res.encodeing = 'utf-8'

soup = BeautifulSoup(res.text, 'html.parser')

'''每个中文字符都进行转换处理'''
title = decode(encode(soup.select('#artibodyTitle')[0].text))
time = decode(encode(soup.select('.time-source')[0].contents[0].strip()))

chinese = '%Y年%m月%d日%H:%M'
timesource = datetime.strptime(time, chinese)
print(title)
print(timesource)

看楼主在研究的过程中,对字符串的编码原理的理解还有所欠缺,这方面的资料在网上很多,可以再自行研究一下,能够获得长足的进步。

望采纳,谢谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-02-17

最前面加这个没:

# coding: UTF-8

追问

加了也没反应

第2个回答  2017-02-17
最前面加这个没最前面加这个没追问

同样的东西print出来一个是乱码一个不是,这是怎么回事....

相似回答