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

如何使用Python保存带葡萄牙语重音字符的推文至CSV格式并解决乱码问题

解决葡萄牙语推文保存CSV时的重音字符乱码问题

嘿,你的问题根源在于手动对文本进行了encode('utf-8')编码,这完全是多余的操作,反而导致了乱码!

问题分析

你已经在打开文件时指定了encoding="utf-8",此时csv.writer会自动把Unicode字符串编码成UTF-8字节写入文件。但你在写入tweet.full_text和tweet.user.screen_name时,手动调用了.encode('utf-8'),把字符串转成了字节对象。当csv.writer处理字节对象时,会将其转换成它的字符串表示形式(比如b'prêmios'会被写成pr\xc3\xaamios这种转义格式),这就是你看到的乱码。

修改后的代码

只需要去掉那两处.encode('utf-8')即可:

import json
import re
import csv
import tweepy
import pandas as pd
#encoding: utf-8
def save_tweets( hashtag_phrase, api: tweepy.API):
    #get the name of the spreadsheet we will write to
    fname = '_'.join(re.findall(r"#(\w+)", hashtag_phrase))
    #open the spreadsheet we will write to
    with open('%s.csv' % (fname), 'w', encoding="utf-8") as file:
        w = csv.writer(file)
        #write header row to spreadsheet
        w.writerow(['timestamp', 'tweet_text', 'username', 'all_hashtags', 'followers_count'])
        #for each tweet matching our hashtags, write relevant info to the spreadsheet
        for tweet in tweepy.Cursor(api.search_tweets, q=hashtag_phrase+' -filter:retweets', tweet_mode='extended', result_type='mixed', lang='pt').items(50):
            # 去掉.encode('utf-8'),直接使用字符串
            w.writerow([
                tweet.created_at, 
                tweet.full_text.replace('\n',' '), 
                tweet.user.screen_name, 
                [e['text'] for e in tweet._json['entities']['hashtags']], 
                tweet.user.followers_count
            ])

额外优化建议(可选)

如果你希望all_hashtags列在CSV里显示为逗号分隔的文本而不是列表格式,可以把列表转成字符串:

','.join([e['text'] for e in tweet._json['entities']['hashtags']])

这样处理后,打开CSV文件时就能正常显示葡萄牙语的重音字符啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:43:14