Python unicode打印格式
我有一个简单的Python(2.7)脚本,它读取数据库表并输出行。最初不需要使用unicode,脚本就是这样:Python unicode打印格式,python,unicode,formatting,Python,Unicode,Formatting,我有一个简单的Python(2.7)脚本,它读取数据库表并输出行。最初不需要使用unicode,脚本就是这样: users = config.Session.query(User).order_by(User.id).all() for _f in users: print "{0:6d} {1:20} {2:30} {3:}".format(_f.id, _f.foo, _f.name, _f.url) 这样做效果很好,输出的格式也很整齐,如下所示: 739 4
users = config.Session.query(User).order_by(User.id).all()
for _f in users:
print "{0:6d} {1:20} {2:30} {3:}".format(_f.id, _f.foo, _f.name, _f.url)
这样做效果很好,输出的格式也很整齐,如下所示:
739 42352 Foo Bar https://...
740 23555 Another User https://...
741 774577 Third User https://...
然后,我们开始在数据库中输入重音名称。最初,脚本开始提出一个关于ascii编解码器不满意的异常
我试图修复脚本,我做到了。我排除了这个异常,但是现在名称中的每个重音字符似乎都是双精度的,这导致URL字段关闭了N个字符,N是名称中重音字符的数量
for _f in users:
uname = _f.name.encode('utf-8')
print "{0:6d} {1:20} {2:30} {3:}".format(_f.id, _f.foo, uname, _f.url)
现在的输出是:
739 42352 Foo Bar https://...
740 23555 Änöther User https://...
741 774577 Third User https://...
我需要在格式化字符串中添加什么才能正确计算带有重音字符的unicode字符串的长度?问题在于使用多字节UTF-8编码打印字节字符串。不要对它进行编码,使用Unicode字符串,例如,
print u“{0:6d}…”
例如:
print "1234567890"*3
print "{0:20} xxx".format(u"Another User")
print "{0:20} xxx".format(u"Änöther User".encode('utf8'))
print u"{0:20} xxx".format(u"Änöther User")
输出:
123456789012345678901234567890
Another User xxx
Änöther User xxx
Änöther User xxx
使用多字节UTF-8编码打印字节字符串是一个问题。不要对它进行编码,使用Unicode字符串,例如,
print u“{0:6d}…”
例如:
print "1234567890"*3
print "{0:20} xxx".format(u"Another User")
print "{0:20} xxx".format(u"Änöther User".encode('utf8'))
print u"{0:20} xxx".format(u"Änöther User")
输出:
123456789012345678901234567890
Another User xxx
Änöther User xxx
Änöther User xxx