0

これは、非常に長い間Pythonを試すのは初めてです。twythonを使用して、ツイートを抽出してコンソールに出力しようとしています。

tw = Twython(APP_KEY, access_token=access_token)
search = tw.search(q='#python')
for tweet in search["statuses"]:
    print(tweet['user']['name'])
    print(tweet['text'])

通常、いくつかのつぶやきが印刷され、ユーザー名またはつぶやきテキストのいずれかを印刷しているときに、これに遭遇します (文字が発生する場所によって異なります)。

UnicodeEncodeError: 'charmap' コーデックは位置 139 の文字 '\u2026' をエンコードできません: 文字マップは

で追加.encode('utf-8')またはラップしようとしましstr()たが、最も近いのは ですがb'text here'、明らかにツイートテキストが必要です。仮付けもしてみましたdecode()。エンコードしたい文字セットの種類をpythonに伝える必要があることを読みましたが、これは行ってきましたが、b'string here'. Web で見つけた多くの例は python3 用ではないため、必要なものを見つけるのが少し難しくなっています。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

0

このページでは、Twitter API が UTF-8 文字を使用して文字カウントを処理する方法について説明しています。これは、一部の UTF-8 文字がツイートの最後で機能し、他の文字が機能しない理由を説明するのに役立ちます。

https://dev.twitter.com/docs/counting-characters

実際の質問については、次の client_args 定義をコードに挿入してください。

from twython import Twython

APP_KEY = "key"
APP_SECRET = "key-secret"
OAUTH_TOKEN = "token"
OAUTH_TOKEN_SECRET = "secret"

client_args = {
  "headers": {
    "accept-charset": "utf-8"
  }
}

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

これにより、アプリケーションから UTF-8 文字を受け入れるように Twitter API に指示する必要があります。次に、スクリプト/コードとそのすべてのインターフェイスも UTF-8 を受け入れるようにする必要があります。あとは、つぶやきやDMを入力して送信するときに、目的のキャラクターを作成するだけです。

上記の client_args 設定が、シェルや他のプログラムでの文字セットの指定と連動しない場合は、送信される特定のヘッダーをいじる必要があるかもしれません。たとえば、"content-type" を設定するほうが適切なヘッダーである、またはそれを含める必要があることがわかる場合があります (そうすべきではありませんが)。

私のつぶやきのほとんどは Emacs (Twitter モードまたは Emacs バッファー内で Twython スクリプトを呼び出すシェル) を介して送信され、Unicode 5.1 または 5.2 までの UTF-8 文字の全範囲を問題なく送信できると思います。

スクリプトでカスタム ヘッダーを実際に設定する必要はありませんでしたが、それは Emacs、bash (シェル)、Firefox、Thunderbird、GPG (最後のものはありません) のすべてで UTF-8 がデフォルトの文字セットであるためです。 Twitter に影響を与えますが、常に) の使用を奨励する価値があり、最後に Twitter API 自体を使用します。他のすべてのものをデフォルトで UTF-8 を使用するように設定していなかった場合、ほぼ確実に、シェル スクリプトを介して Unicode で問題が発生し、他の場所でも問題が発生する可能性があります。

最後に、ほとんどの UTF-8 文字はスクリプトを介して送信できるが、一部の (通常はあまり一般的でないか、比較的新しい) 文字は送信できないことがわかった場合、その理由はオペレーティング システムでサポートされている Unicode のバージョンと、 /または利用可能な文字セット (フォント)。この問題が発生すると、正しい文字を Twitter に送信できたとしても、コンピューターで表示できなくなるため、実際に問題が発生することになります。一方、その時点に到達すると、少なくともツイートの一部が表示され、エラー メッセージが停止します。

Python Requests のドキュメントと Twython のドキュメントには、カスタマイズされたヘッダーを送信 (POST) するための形式に関する追加の詳細が記載されており、Wikipedia にはヘッダーの種類のリストが含まれています。

ウィキペディアのリストは次のとおりです。

https://en.wikipedia.org/wiki/List_of_HTTP_header_fields

残念ながら、私のスタック アカウントは最近アクティブになったばかりなので、すべての便利なものをリンクすることはできません。リクエストのドキュメント (「より複雑な POST リクエスト」セクションを参照) と Twython のドキュメント (「リクエスト ヘッダー、プロキシなどを操作する」セクションを参照) を確認する必要がある場合があります。

于 2013-09-21T11:00:24.357 に答える
0

コンソールで使用されている文字セットは何ですか? アスキーだと思います。'\u2026' は utf-8 では有効な文字ですが、ASCII では無効です。
文字列を印刷すると、文字列は内部で Unicode シーケンスとして保存されるため、Python はコンソールのデフォルトの文字セットでエンコードしようとします。発生した種類のエラーは、文字列内の一部の文字がデフォルトの文字セットでサポートされていない場合に発生します。
ロケール lang を utf-8 に変更してスクリプトを再度実行すると、Unicode 文字「\u2026」が「…」と表示されます。

于 2013-09-04T02:31:28.153 に答える