2013-11-09 87 views
0

我读了一个文本文件,其中有一些字符'\260'(意思是'°'),然后我将它添加到DB(sqlite3)。编码(unicode)十六进制到八进制

之后,我尝试从DB获取信息,但是sql查询将使用'\xb0'(也意味着'°')构建,因为我从XML文件中获取此信息。

我尝试用八进制chracters替换十六进制字符:文本= text.replace(r'\xb0', '\260'),但它不能正常工作,为什么?我无法构建正确的sql查询。

也许有这个问题例如一些解决方案编码,解码等

回答

2

\260是一回事\xb0:您输入到Unicode

>>> '\xb0' 
'\xb0' 
>>> '\260' 
'\xb0' 

你可能想解码并插入代替。如果您的数据编码为拉丁文1然后解码:

>>> print '\xb0'.decode('latin1') 
° 

sqlite3可以处理Unicode的蛮好的,通过解码你要确保你正在处理文本值,而不是字节值,可以从编解码器的不同而不同编解码器。

+0

咋地,但SELECT * FROM xxx其中一个= '\ xb0C' 是不一样的选择*从xxx其中a = '\ 260',这是我的问题。我应该写select * from xxx where a ='\ xb0'.decode('latin1')? – user2973395

+0

@ user2973395:使用sql参数; 'cursor.execute('select * from xxx where a =?',(u'\ xb0',))'。 –

+0

@ user2973395:不要使查询unicode,只有参数。 –

相关问题