如何在python中从unicode转换为utf8?

时间:2014-06-17 16:11:36

标签: python unicode utf-8 xbmc

我正在使用我的python脚本从sqlite3数据库中为xbmc媒体应用程序提取数据。

我可以看到,在我的代码中,它将使用unicode对象提取数据,我将拥有字符串(u'uL

我想将它从unicode对象转换回普通字符串到utf8。

以下是代码:

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日志:

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,所以我想让它看起来像这样:

'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...

请告诉我如何使用python 2.6版本将unicode对象转换为utf8?

2 个答案:

答案 0 :(得分:2)

  • L后缀表示长整数。它们与(短)整数完全相同;真的没有必要转换这些。只有repr()输出包含L;直接打印或将其写入文件,并且不包含L后缀。

  • 可以使用unicode.encode()方法将Unicode值编码为UTF-8:

    encoded = unicodestr.encode('utf8')
    

你的牛肉是这里的清单代表;您记录了所有行,Python容器通过对每个值调用repr()来表示其内容。这些表示非常适合调试,因为它们的类型很明显。

这取决于您对这些值 next 的处理方式。在整个代码中使用Unicode通常是个好主意,并且只在最后一刻(写入文件,或通过网络打印或发送时)进行编码。很多方法为你处理这个。例如,打印将自动编码到终端编解码器。添加到XML文件时,大多数XML库会为您处理Unicode。等

答案 1 :(得分:0)

您的问题是您正在尝试显示数据,INSTEAD您正在显示 python表示(如果此对象)。

所以它包含像u,L等的元数据。 如果你想以你想要的方式显示数据,你应该编写一个代码来处理它。

例如:

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

所以它看起来像

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

但是......正如我所看到的,你使结构看起来像CSV文件(以逗号分隔的值),对吗?那么,也许,您应该阅读有关csv python模块的内容吗?