【问题标题】:return utf8 json type in Python在 Python 中返回 utf8 json 类型
【发布时间】:2016-04-08 05:30:46
【问题描述】:

我正在 Flask 中创建一个 RSS 阅读器应用程序。在我的程序中,我通过feedparser 包获取提要数据,并且我想以 JSON 格式返回数据。 我的代码在英文网站上运行良好,但是当我想获取任何英文提要时,我收到以下错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

@app.route('/fetch',methods=['POST'])
def fetch():
    url = request.form['url']
    feed = feedparser.parse(url)
    output = {'response':'','result':''}
    body = ''
    for post in feed.entries:
        body += '<div class="post">'
        body += '<h3 class="post-title">{}</h3>'.format(post.title)
        body += '<div class="post-body">{}</div>'.format(post.summary_detail.value)
        body += '</div>'

    output['response'] = 'ok'
    output['result'] =   body  
    return json.dumps(output, ensure_ascii=False).encode('utf8')

我试过这个:

    output['result'] =   body.encode('utf8')  
    return json.dumps(output, ensure_ascii=False)

但我也有同样的问题。

【问题讨论】:

标签: python json


【解决方案1】:

您正在将 Unicode 字符串插入字节字符串:

body += '<h3 class="post-title">{}</h3>'.format(post.title)
body += '<div class="post-body">{}</div>'.format(post.summary_detail.value)

post.titlepost.summary_detail.value 都需要编码为字节才能工作,Python 使用 ASCII 来实现这一点。这就是您在此处收到 encoding 错误的原因。

改为创建一个 Unicode 字符串:

body = []
for post in feed.entries:
    body.append(
        u'<div class="post">'
        u'<h3 class="post-title">{}</h3>'
        u'<div class="post-body">{}</div>'
        u'</div>'.format(post.title, post.summary_detail.value)
 body = u''.join(body)

上面使用str.join() 连接你的div,而不是创建许多小字符串。

【讨论】:

    猜你喜欢
    • 2013-10-01
    • 2021-02-14
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多