使用编码的unicode字符串时字符串格式错误

时间:2012-03-20 23:33:51

标签: python unicode

我正在处理一些unicode字符串,每当我需要显示它们时,我使用utf-8进行编码。这样我确保即使将我的脚本输出重定向到文件,也会使用正确的编码(我知道还有其他方法可以做到这一点,但这不是重点)。

现在,有时我需要将一些数据制成表格,为此我使用格式说明符,如下所示:

def tabulate(uni1, uni2):
    print "%-15s,%-15s" % (uni1.encode('utf-8'), uni2.encode('utf-8'))

print '01234567890123456789' # ruler
tabulate(u'HELLO', u'BYE')
tabulate(u'ñññññ', u'BYE')

该程序将产生以下输出

01234567890123456789
HELLO          ,BYE            
ñññññ     ,BYE

如您所见,第二个字符串未正确列表。我想%s不知道字符串的编码,并严重计算它的长度。

这个问题有解决方法吗?

2 个答案:

答案 0 :(得分:1)

格式为unicode,然后编码。

答案 1 :(得分:1)

以下是Ignacio指出的实现,即在编码之前进行格式化:

def tabulate(uni1, uni2):
    print (u"%-15s,%-15s" % (uni1, uni2)).encode('utf-8')

>>> tabulate(u'HELLO', u'BYE')
HELLO          ,BYE            
>>> tabulate(u'ñññññ', u'BYE')
ñññññ          ,BYE