59555


日本語で取得したツイートをCSVで出力する際に、文字化けします。  
utf_8の代わりにshift_jisに変換しても文字化けします。  
文字化けしない方法あれば、教えていただけますでしょうか。  
お手数ですが、よろしくお願いいたします。

[code]

    #ツイート取得
    tweet_data = []
    
    for tweet in tweepy.Cursor(api.user_timeline,screen_name = "beechhangergals",exclude_replies = True).items():
        tweet_data.append([tweet.id,tweet.created_at,tweet.text.replace('\n',''),tweet.favorite_count,tweet.retweet_count])
    
    #csv出力
    with open('tweets.csv', 'w',newline='',encoding='utf_8') as f:
        writer = csv.writer(f, lineterminator='\n')
        writer.writerow(["id","created_at","text","fav","RT"])
        writer.writerows(tweet_data)
    pass
    
[/code]


CC BY-SA 4.0
2019-10-07T10:03:53.920
59530
2019-10-08T04:19:22.847
2019-10-07T10:12:29.510
32986
18859
question
python
pythonの文字コード変換する


Ubuntuの場合、lessとfileを以下でインストール可能です:

[code]

    apt install less file
    
[/code]

実行のテストを高速化させるため、以下の部分を修正してください:

[code]

    for tweet in tweepy.Cursor(api.user_timeline,screen_name = "beechhangergals",exclude_replies = True).items():
        tweet_data.append([tweet.id,tweet.created_at,tweet.text.replace('\n',''),tweet.favorite_count,tweet.retweet_count])
        break #breakを追加し、実行のテストを高速化する
    
[/code]

次にスクリプトを実行し、以下のコマンドで開きます。

[code]

    less tweets.csv
    
[/code]

すると日本語が正常に表示されるはずです。文字のエンコードを確かめるためには以下を実行します:

[code]

    file -i tweets.csv
    
[/code]

[出力]

[code]

    tweets.csv: text/plain; charset=utf-8
    
[/code]

つまり、このスクリプトを実行することによって生成されるcsvのエンコードはutf-8です。

pythonのバージョンを確認するために、以下を実行します:

[code]

    python --version
    
[/code]

もし、バージョンが2系であれば、3系を試してください。

[code]

    apt install python3 python3-pip
    python3 script.py
    
[/code]

2019/10/08 時点では、少なくともtweepyのバージョンが `tweepy==3.8.0`
であればスクリプトの実行は成功します。バージョンを最新にするために以下を実行してください。

[code]

    pip3 install -U tweepy
    
[/code]

Excelを使わずに、lessコマンド等で見るか、あるいはEmacsやVimのようなエディタで開いて試してください。

もしこれらを行っても文字化けする場合、OSの言語設定を確認してください。Ubuntuの場合、言語設定の詳細は以下で確認できます:  
<https://help.ubuntu.com/stable/ubuntu-help/session-language.html.en>


CC BY-SA 4.0
2019-10-08T04:11:24.957
59555
2019-10-08T04:19:22.847
2019-10-08T04:19:22.847
59530
answer