SQLite3编码Latin-1数据

时间:2014-02-08 18:25:24

标签: python sqlite csv encoding

我有一个CSV文件,其中包含许多行,其数据为Latin-1,例如

 Àird a' Bhàigh

我正在尝试使用DictReader将这些数据加载到SQLite中,我尝试的每个选项都不会在SQLite中创建正确的数据。

选项1:Unicode

reader = csv.DictReader(open('data.txt', "rb"), delimiter=':')
for row in reader:
     to_db = [unicode(row[0], "utf8")]
     cur.execute("INSERT INTO table (name) VALUES (?);", to_db)

选项2:解码

reader = csv.DictReader(open('data.txt', "rb"), delimiter=':')
for row in reader:
     to_db = [row[0].decode('latin-1')]
     cur.execute("INSERT INTO table (name) VALUES (?);", to_db)

选项3:解码和编码

reader = csv.DictReader(open('data.txt', "rb"), delimiter=':')
for row in reader:
     to_db = [row[0].decode('latin-1').encode('utf-8')]
     cur.execute("INSERT INTO table (name) VALUES (?);", to_db)

对于每个选项,我都会遇到各种错误,包括

'utf8' codec can't decode byte 0xe0 in position 4

You must not use 8-bit bytestrings

所以我随后将连接更改为:

connection.text_factory = str

我再次在数据中得到黑色问号。

这非常令人沮丧,因为用PostgreSQL

之类的东西设置编码非常简单

希望有人可以帮助解决方案

由于

更新:

以下是文件的一些行

2467:NB2601:Àird a' Bhàigh:NB20:57:55.1:6:37.2:901500:126500:W:WI:N Eil:Na h-Eileanan an Iar:H:01-MAR-1993:I:14:0:0
2468:NB2034:Àird a' Chaolais:NB22:58:12.6:6:45.5:934500:120500:W:WI:N Eil:Na h-Eileanan an Iar:X:01-MAR-1993:I:8:13:0
2469:NL6197:Àird a' Chaolais:NL68:56:56.7:7:34.1:797500:61500:W:WI:N Eil:Na h-Eileanan an Iar:X:01-MAR-1993:I:31:0:0
2470:NB4232:Àird a' Chleirich:NB42:58:12.4:6:23:932500:142500:W:WI:N Eil:Na h-Eileanan an Iar:X:01-MAR-1993:I:8:0:0
2471:NM4118:Àird a' Chrainn:NM40:56:17.3:6:10.6:718500:141500:W:AR:Arg & Bt:Argyll and Bute:X:01-MAR-1993:I:48:0:0
2472:NM7331:Àird a' Chrotha:NM62:56:25.3:5:40.4:731500:173500:W:AR:Arg & Bt:Argyll and Bute:X:01-JUL-1996:U:49:0:0
2473:NB2045:Àird a' Ghobhann:NB24:58:18.5:6:46.3:945500:120500:W:WI:N Eil:Na h-Eileanan anIar:X:01-JAN-1995:U:8:0:0
2474:NF7445:Àird a' Mhachair:NF64:57:23:7:25.1:845500:74500:W:WI:N Eil:Na h-Eileanan an Iar:O:05-JAN-2012:U:22:0:0
2475:NF8379:Àird a' Mhòrain:NF86:57:41.6:7:18.8:879500:83500:W:WI:N Eil:Na h-Eileanan an Iar:H:01-MAR-1993:I:18:0:0
2476:NB1810:Àird a' Mhulaidh:NB00:57:59.7:6:45.9:910500:118500:W:WI:N Eil:Na h-Eileanan an Iar:O:01-MAY-1997:U:13:14:0
2477:NF7974:Àird a' Phuind:NF66:57:38.8:7:22.4:874500:79500:W:WI:N Eil:Na h-Eileanan an Iar:X:01-MAR-1993:I:18:0:0

你可以看到它是我正在努力争取的第三个专栏。

这就是使用浏览器通过Firefox

在SQLite中的样子

enter image description here

更新2:当我打印repr(行[0])时,我得到以下

"\xc0ird a' Bh\xe0igh"
"\xc0ird a' Chaolais"
"\xc0ird a' Chaolais"
"\xc0ird a' Chleirich"
"\xc0ird a' Chrainn"
"\xc0ird a' Chrotha"
"\xc0ird a' Ghobhann"
"\xc0ird a' Mhachair"
"\xc0ird a' Mh\xf2rain"
"\xc0ird a' Mhulaidh"
"\xc0ird a' Phuind"

我怎样才能确定它是Latin1,这就是我认为那些角色属于

的字符集

0 个答案:

没有答案