代码之家  ›  专栏  ›  技术社区  ›  Adam Matan

Python字符串格式化+UTF-8奇怪的行为

  •  3
  • Adam Matan  · 技术社区  · 14 年前

    打印固定长度的格式化字符串时(例如, %20s ),宽度不同于UTF-8字符串和普通字符串:

    >>> str1="Adam Matan"
    >>> str2="אדם מתן"
    >>> print "X %20s X" % str1
    X           Adam Matan X
    >>> print "X %20s X" % str2
    X        אדם מתן X
    

    注意区别:

    X           Adam Matan X
    X        אדם מתן X
    

    有什么想法吗?

    3 回复  |  直到 14 年前
        1
  •  7
  •   tghw megawac    14 年前

    您需要通过将 u

    >>> str1="Adam Matan"
    >>> str2=u"אדם מתן"
    >>> print "X %20s X" % str1
    X           Adam Matan X
    >>> print "X %20s X" % str2
    X              אדם מתן X
    

        2
  •  3
  •   lunaryorn    14 年前

    在Python2中,未固定的字符串文字是 str ,这是一个 字节字符串 . 它存储任意字节,而不是字符。UTF-8编码一些超过一个字节的字符。 str2 因此,包含的字节比实际字符多,并且在字符串格式中显示意外但完全有效的行为。如果你看看实际情况 字节 repr 而不是 print

    如前所述,解决方案是使用unicode字符串。在Python中处理字符串时,您绝对需要理解并认识unicode和字节字符串之间的区别。

        3
  •  1
  •   Michał Kwiatkowski    14 年前

    请这样做:

    >>> str1="Adam Matan"
    >>> str2=unicode("אדם מתן", "utf8")
    >>> print "X %20s X" % str2
    X              אדם מתן X
    >>> print "X %20s X" % str1
    X           Adam Matan X