2013-11-09 89 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,只有參數。 –

相關問題