2017-08-01 3 views
1

多くのトピックがこのテーマで公開されていますが、私は多くの異なる文字を含むテキストを含むデータセットを持っています。したがって、Python 2.7.13でRequestsライブラリを使用してPOSTリクエストを行う前に、テキストをエンコードします。リクエストPost-UnicodeEncodeErrorがutf-8でエンコードされていても表示されます

私のコードは以下の通りです:

# -*- coding: utf-8 -*- 
# encoding=utf8 
import sys 
reload(sys) 
sys.setdefaultencoding('utf8') 
import json 
import requests 
text = """So happy to be together on your birthday! ❤ Thankful for real life. ❤ A post shared by Jessica Chastain (@jessicachastain) on Nov 13, 2016 at 5:22am PST""" 
textX = json.dumps({'text': text.encode('utf-8')}) 
r = requests.post('http://####', data=textX, 
         headers={'Content-Type': 'application/json; charset=UTF-8'}) 
print(r.text) 

データはJSON形式で送信されます。私がUTF-8としてテキストをエンコードしようとするにもかかわらず、依頼から次のエラーが表示されます。

UnicodeEncodeError: 'latin-1' codec can't encode character '\u2764' in 
position 42: Body ('❤') is not valid Latin-1. Use body.encode('utf-8') 
if you want to send it encoded in UTF-8. 

編集:固定 構文エラーではなくjson.dumpsのための問題

+0

は 'textX = json.dumps({」に') 'あなたが閉鎖を欠落しているではありませんテキストエラーが発生している可能性があります... 残りのトレースバックを投稿できますか:どのラインがUnicodeErrorを生成していますか? – cowbert

+0

@cowbert、正しいですか?構文エラーがありましたが、構文が正しい場合でもUnicodeエラーが発生しました。 – Furkanicus

答えて

0

デフォルトの原因は、符号化の問題を解消ASCIIのみの文字列を生成することです。エラーは、Unicode文字列を使用していません。エンコーディング宣言(#coding=utf8)でソースファイルを保存することを確認します:

# coding=utf8 
import json 
text = u"""So happy to be together on your birthday! ❤ Thankful for real life. ❤ A post shared by Jessica Chastain (@jessicachastain) on Nov 13, 2016 at 5:22am PST""" 
textX = json.dumps({u'text': text}) 

出力:

'{"text": "So happy to be together on your birthday! \\u2764 Thankful for real life. \\u2764 A post shared by Jessica Chastain (@jessicachastain) on Nov 13, 2016 at 5:22am PST"}' 
+0

あなたの回答から@ mark-tolonenありがとうございます。あなたと同じ出力、私はまだテキストを投稿しようとすると、次のエラーが表示されます UnicodeEncodeError: 'latin-1'コーデックで文字 '\ u2764'をエンコードできません ポジション42:ボディ( '❤')は無効ですラテン語-1。 UTF-8でエンコードして送信する場合は、body.encode( 'utf-8') を使用してください。 – Furkanicus

+1

@Furkanicus実際に私の書式設定は出力上で間違っていたため、実際のコンテンツは表示されませんでした。 '\ u2764'文字はありませんが、' \\ u2764 'というリテラルエスケープコードがあるので、そこにはUnicode文字はありません。だから、それは他のどこかのバグのようだ。どこでも 'latin-1'を指定していません。 JSONはエスケープコードで送信することができ、サーバーが処理するときに接続の反対側でデコードされます。 –

関連する問題