Bu işleve, SQLAlchemy ve UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
alıyorum:
re.compile(ur"<([^>]+)>", flags=re.UNICODE).sub(u" ", s)
veritabanı kodlama utf olduğunu -8 ve hatta kodlamayı SQLAlchemy'nin create_engine işlevine geçiriyorum.
Düzenleme: Bu benim veritabanı sorgulama am nasıl: öneri olarak
doc = session.query(Document).get(doc_id)
s = doc.title
, ben s.decode geçti ('utf-8') sub
için. Hata yukarıda kayboldu, ama farklı bir belge için farklı bir hata alıyorum:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 449: invalid continuation byte
veritabanı tablosu şöyle tanımlanır:
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;
Herhangi bir yardım olacağını büyük ölçüde
Daha fazla kod görebilir miyiz? Nereden geliyor? Kodları ('utf8') 'düzeltmek mi? –
@MartijnPieters, s.decode ('utf-8') ekleyerek söz konusu belgenin hatasını düzeltir, ancak veritabanından farklı bir belge almaya çalışırsam şunu alırım: UnicodeDecodeError: 'utf8' codec'i bayt 0xb'yi çözemez pozisyon 449: geçersiz devam bayt. Yani, aynı hata, farklı karakter. – user1491915
Hayır, bu farklı bir hatadır (biri ascii'den, diğerinden utf-8'den bir kod çözme). Bu, ikinci belgenin tüm * UTF-8 veri * olmadığı anlamına gelir. İşte bu yüzden nereden geldiğini görmek istiyoruz. –