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

展开全部

楼主你好!

其实按照你的代码的逻辑来32313133353236313431303231363533e58685e5aeb931333363356563做是没有错的,无法显示成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)

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

望采纳,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值