You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7 Unicode问题:存储推文到JSON出现转义字符

解决Twitter流数据保存JSON时Unicode转义字符问题

嘿,我懂你现在的困扰——用Tweepy存推文到JSON文件,结果里面全是\u0e40\u0e21这类Unicode转义码,换了好几种编码都没解决,对吧?其实问题根本不在编码上,而是你处理数据的方式搞错了。

问题根源

Twitter API返回的data本身就是已经序列化完成的JSON字符串,里面的\uXXXX是JSON标准的Unicode转义格式。你直接把这个字符串写入文件,自然会保留这些转义符号——哪怕你指定了utf-8编码,也只是把转义后的字符串以utf-8编码保存而已,完全没处理里面的转义内容。

解决方案:解析后重新序列化

我们需要先把JSON字符串解析成Python原生对象(字典/列表),然后再重新序列化为JSON文件,同时告诉序列化器不要转义非ASCII字符。具体修改你的代码如下:

首先确保导入json模块,然后调整on_data方法:

import json
import codecs

def on_data(self, data):
    try:
        # 第一步:把API返回的JSON字符串解析成Python对象
        tweet_obj = json.loads(data)
        
        # 第二步:以追加模式写入文件,指定不转义Unicode字符
        with codecs.open('python.json', 'a', encoding='utf-8') as f:
            # ensure_ascii=False 是核心,直接输出原始Unicode字符
            json.dump(tweet_obj, f, ensure_ascii=False)
            f.write('\n')  # 每个推文单独占一行,方便后续读取处理
            print("Tweet ajouté au JSON")
        return True
    except BaseException as e:
        print("Error on_data: %s" % str(e))
        return True

关键改动说明

  • json.loads(data):这一步把转义后的JSON字符串转换成Python字典,此时里面的非ASCII字符(比如你看到的泰文)会变成Python原生的Unicode字符串,不再是转义码。
  • json.dump(..., ensure_ascii=False):这个参数告诉JSON序列化器,不要把非ASCII字符转义成\uXXXX,直接输出原始的可读字符。
  • 追加换行符:让每个推文单独占一行,这样你的文件会变成JSON Lines格式,既方便后续按行读取处理,也避免了直接追加多个JSON对象导致整个文件无效的问题。

如果之前的文件已经有转义内容,你可以写个小脚本读取旧文件,解析后重新写入,就能把所有转义码转换成可读的Unicode字符啦。

内容的提问来源于stack exchange,提问作者Ravure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:36:09