2013-11-09 2 views
0

'\260' (의미는 '°')과 같은 일부 문자가있는 텍스트 파일을 읽은 다음 DB (sqlite3)에 추가합니다.(유니 코드) 16 진수에서 8 진수로

그런 다음 DB에서 정보를 얻으려고하지만 SQL 쿼리는 '\xb0' (이는 '°'을 의미 함)으로 작성됩니다. XML 파일에서이 정보를 얻으므로.

나는 16 진수 문자를 8 진수로 대체하려고합니다 : text = text.replace(r'\xb0', '\260')하지만 작동하지 않습니다, 왜? 올바른 SQL 쿼리를 작성할 수 없습니다.

아마도이 문제에 대한 해결책이있을 수 있습니다. 인코딩, \xb0

답변

2

\260같은 일 등등 디코딩 : 유니 코드에

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

당신은 아마 원하는 디코드 로 입력 대신에 삽입합니다.

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

sqlite3이 잘 유니 코드를 처리 할 수 ​​있으며, 디코딩하여 당신은 당신이 코덱 코덱과 다를 수 있습니다 텍스트 값이 아닌 바이트 값을 처리하고 있는지 확인 : 데이터가 라틴어 1로 인코딩 된 경우 디코딩.

+0

ye, but select * from xxx 여기서 a = '\ xb0C'는 select * from xxx와 같지 않습니다. 여기서 a = '\ 260'이 내 문제입니다. xxx에서 select *를 써야합니까? a = '\ xb0 '.decode ('latin1 ')? – user2973395

+0

@ user2973395 : SQL 매개 변수를 사용하십시오. 'cursor.execute ('select * from xxx 여기서 a =?', (u '\ xb0',))'. –

+0

@ user2973395 : 쿼리를 유니 코드로 만들지 말고 매개 변수 만 만듭니다. –

관련 문제