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

2024-12-15 21:30:12
推荐回答(3个)
回答1:

楼主你好!

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

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

望采纳,谢谢!

回答2:

最前面加这个没:

# coding: UTF-8

回答3:

最前面加这个没最前面加这个没