我正在处理一些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
不知道字符串的编码,并严重计算它的长度。
这个问题有解决方法吗?
答案 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