私はデータベースにツイートを読み込むためにSQLAlchemyの&次の行をTweepy &を使用していたのPython 3.5、内のコードを書かれているし、それがうまく働いた:はPython 2.7でエンコーディングを取り扱うとする方法SQLAlchemyの☠️
twitter = Twitter(str(tweet.user.name).encode('utf8'), str(tweet.text).encode('utf8'))
session.add(twitter)
session.commit()
Pythonの2.7で、今と同じコードを使用して
は、エラーが発生します。
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 139: ordinal not in range(128)
いただきましソリューション?私のMySQL設定は、次のいずれかです。
サーバー側 - > utf8mb4エンコーディング
クライアント側 - >create_engine('mysql+pymysql://abc:[email protected]/def', encoding='utf8', convert_unicode=True)
):
UPDATE
何の解決策が存在しないようです、少なくともPython 2.7 + SQLAlchemyではありません。ここに私がこれまでに見つけたものがあります、もし私が間違っていたら、私を修正してください。
Tweepyは、少なくともPython 2.7では、ユニコードタイプのオブジェクトを返します。 Pythonの2.7で
:tweet = u'☠'
は、Python 3.5では<'unicode' type>
です:tweet = u'☠'
は<'str' class>
ですこれは私がstr(tweet)
を行う場合はPython 2.7は、その後、エンコードしようとするためのPython 2.7は私に 'UnicodeEncodeErrorを' を与えることを意味しますこの文字 '☠'はASCIIに変換できません。ASCIIはthis basic charactersしか処理できないため、不可能です。
結論:実際に権利を動作するはずです。この文のtweet.user.name.encode('utf-8')
またはSQLAlchemyのラインで、この1 str(tweet.user.name.encode('utf-8'))
のいずれかを使用して
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-4: ordinal not in range(256)
:SQLAlchemyのラインでちょうどこの文tweet.user.name
を使用するには、
私に次のエラーを与えますしかし、それはデータベース側で私に符号化されていない文字を表示します:
ð´ââ ï¸Jack Sparrow
これは私がそれを示したいものです:
印刷を:☠️ Jack Sparrow
特殊文字のユニコード:u'\U0001f3f4\u200d\u2620\ufe0f'
特殊文字をUTF-8エンコーディング:'\xf0\x9f\x8f\xb4\xe2\x80\x8d\xe2\x98\xa0\xef\xb8\x8f'
これは '# - * - coding:utf-8 - * - 'は単なるコメントであり、規約にすぎないのですか? – saitam
'# - * - coding:utf-8 - * - 'は、ファイルの解析時に使用するエンコーディングをインタープリターに指示しますが、ASCII以外の文字(リテラル)を含むファイルにのみ影響します。他の方法ではコードには影響しません。また、[sqlalchemy docの[mysql unicode]セクション(http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#unicode)を見て、 '?charset = ..を追加する必要があります。あなたの接続URLに接続文字セットを変更する – mata