2014-06-17 4 views
2

xbmc 미디어 응용 프로그램의 sqlite3 데이터베이스에서 데이터를 추출하려면 python 스크립트를 작성하고 있습니다.파이썬에서 유니 코드를 utf8로 변환하는 방법?

코드에서 유니 코드 객체를 사용하여 데이터를 추출한다는 것을 알 수 있습니다. 여기에 문자열 (u', uL이 있습니다.

유니 코드 개체에서 utf8로 일반 문자열로 다시 변환하려고합니다.

03:49:03 T:3628 NOTICE: [(u'101 ABC FAMILY ', u'The Middle - The Ditch', 
20140520170000L, 20140520173000L), (u'101 ABC FAMILY ', u'The Goonies', 
20140520173000L, 20140520200000L), (u'101 ABC FAMILY ', u'Pirates of the Caribbean: On Stranger Tides', 
20140520200000L, 20140520230000L), (u'101 ABC FAMILY ', u'The 700 Club', 
20140520230000L, 20140521000000L), (u'101 ABC FAMILY ', u'The Fresh Prince of Bel-Air - Day Damn One', 
20140521000000L, 20140521003000L), (u'101 ABC FAMILY ', u'The Fresh Prince of Bel-Air - Lucky Charm', 
20140521003000L, 20140521010000L), (u'101 ABC FAMILY ', u'The Fresh Prince of Bel-Air - The Ethnic Tip', 
20140521010000L, 20140521013000L), (u'101 ABC FAMILY ', u'The Fresh Prince of Bel-Air - The Young and the Restless', 
20140521013000L, 20140521020000L), (u'101 ABC FAMILY ', u'Summer Sexy With T25!', 
20140521020000L, 20140521023000L), (u'101 ABC FAMILY ', u'Paid Programming', 
20140521023000L, 20140521030000L) 

내가 (u', uL 그래서 내가이처럼 보이게 할 문자열을 무시해야합니다 : 여기

programs = None 
daysLimit = 14 
start = datetime.datetime.now() 
end = start + datetime.timedelta(days = daysLimit) 
cur.execute('SELECT channel, title, start_date, stop_date FROM programs WHERE channel') 
programs = cur.fetchall() 

print(programs) 
cur.close() 

는 XBMC 로그입니다 : 여기

코드입니다 :

'101 ABC FAMILY ', 'The Middle - The Ditch', 20140520170000, 20140520173000, 
'101 ABC FAMILY ', 'The Goonies', 20140520173000, 20140520200000, 
'101 ABC FAMILY ', 'Pirates of the Caribbean: On Stranger Tides', 20140520200000, 20140520230000, 
'101 ABC FAMILY ', 'The 700 Club', 20140520230000, 20140521000000, 
'101 ABC FAMILY ', 'The Fresh Prince of Bel-Air - Day Damn One', 20140521000000, 20140521003000, 
and so on... 

내가 어떻게하면 좋을지 말해 줄 수 있습니까? 파이썬 2.6 버전을 사용하여 unicode 객체에서 utf8로 변환 하시겠습니까?

+1

'UTF-8로 인코딩 된 바이트 문자열'을 의미합니다. 유니 코드 문자열은 * 정상적인 문자열입니다. –

답변

0

귀하의 문제는 당신이 데이터를 표시하려고하는 것입니다.이 개체가 있다면 파이썬 표현이 표시됩니다.

그래서 u, L 등의 메타 데이터가 포함되어 있습니다. 데이터를 원하는 방식으로 표시하려면이를 처리 할 코드를 작성해야합니다.예를 들어

: 내가 볼 수

for row in cur.fetchall(): 
    print u"'{row[0]}', '{row[1]}', '{row[2]}', '{row[3]}', '{row[4]}'".format(row=row) 

그래서 당신이 구조 (값을 쉼표로 구분) CSV 파일처럼 보이게 ...

'1', '2', '3', '4' 
'1', '2', '3', '4' 
'1', '2', '3', '4' 

처럼 그러나 것이다, 너? 그래서, 아마도 csv python 모듈에 대해 읽어야합니다.

+0

대단히 감사합니다. 지금 당장은 작동하는 것을 볼 수 있습니다. 'print row [0], row [1], row [2], row [3] .format (row = row)'를 사용하려고하면 오류가 발생합니다 : AttributeError : 'long' '체재'. 어떤 생각? –

+0

'{row [0]} ','{row [1]} ','{row [2]} ','{row [3]} ','{row [4]} ' '.format (row = row)' – dt0xff

+0

논리는 : ** 문자열 ** 패턴을 사용하여 데이터를 형식화 **하므로 문자열 객체를 사용하고'format' 메소드를 호출해야합니다. – dt0xff

2
  • L은 긴 정수를 나타냅니다. 그것들은 (짧은) 정수와 실제로 동일합니다; 이를 변환 할 필요가 없습니다. L을 포함하는 출력은 repr()뿐입니다. 값 을 직접으로 인쇄하거나 파일에 쓰고 L 접미사는 포함되지 않습니다.

  • 유니 코드 값이 unicode.encode() 방법으로 UTF-8로 인코딩 될 수

    encoded = unicodestr.encode('utf8') 
    

내 소고기를 목록으로 표시이고; 모든 행을 기록했고 Python 컨테이너는 각 값에 repr()을 호출하여 내용을 나타냅니다. 이러한 표현은 유형이 분명 해짐에 따라 디버깅에 유용합니다.

이 값으로 수행하는 작업에 따라 달라집니다. 다음입니다. 일반적으로 코드 전체에서 유니 코드를 사용하고 마지막 순간 (파일에 쓰거나 네트워크를 통해 인쇄 또는 전송할 때)에만 인코딩하는 것이 좋습니다. 좋은 방법이 많이 있습니다 을 처리하십시오. 예를 들어, 인쇄는 터미널 코덱을 자동으로 인코딩합니다. XML 파일에 추가 할 때 대부분의 XML 라이브러리가 유니 코드를 처리합니다. 기타

+0

대단히 고맙습니다. 그래서'encoded = unicodestr.encode ('utf8')'을 사용하여 코드를 어떻게 사용할 수 있습니까? –

+0

@ user3667173 : 예, 유니 코드 값을 UTF-8 바이트로 인코딩 할 수 있습니다. ** 수동으로 인코딩하지 않는 것과 같은 더 나은 옵션 **이 없는지 확인하십시오. –

관련 문제