Python unicode打印格式

2024-05-15 02:08:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的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   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字符串的长度?你知道吗


Tags: nameinhttps脚本id数据库formatfor
1条回答
网友
1楼 · 发布于 2024-05-15 02:08:16

使用多字节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

相关问题 更多 >

    热门问题