私はテキストは、この関数に、私はSQLAlchemyのを使用してアクセスしていますが、MySQLデータベースから来る通過したときに、私はSQLAlchemyのとUnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
を取得しています:
re.compile(ur"<([^>]+)>", flags=re.UNICODE).sub(u" ", s)
データベースのエンコーディングがUTFあります-8、私はSQLAlchemyのcreate_engine関数にエンコーディングを渡しています。
編集: これは私がデータベースを照会しています方法です:提案することで
doc = session.query(Document).get(doc_id)
s = doc.title
が、私はs.decodeを通過した( 'UTF-8')sub
へ。消え上記のエラーが、私は別のドキュメントのために別のエラーを取得:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 449: invalid continuation byte
データベーステーブルはこのように定義されています
CREATE TABLE `articles` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`cdate` datetime DEFAULT NULL,
`link` varchar(255) DEFAULT NULL,
`content` text,
UNIQUE KEY `id` (`id`),
UNIQUE KEY `link_idx` (`link`)
) ENGINE=InnoDB AUTO_INCREMENT=4127834 DEFAULT CHARSET=utf8;
すべてのヘルプは大幅に私が持っている
さらにコードを表示できますか? 's'はどこから来たの? 's.decode( 'utf8')'が修正するだろうか? –
@MartijnPieters s.decode( 'utf-8')を追加すると、特定のドキュメントのエラーが修正されますが、データベースから別のドキュメントを取得しようとすると、UnicodeDecodeError: 'utf8'コーデックで0xebのバイトをデコードできませんポジション449:無効な継続バイト。だから、同じエラー、別の文字。 – user1491915
いいえ、それは別のエラーです(1つはasciiから、もう1つはutf-8からデコードされます)。つまり、2番目のドキュメントはUTF-8データ*ではありません。だから私たちは 's'がどこから来たのかを知りたいのです。 –