使用%运算符的Python Unicode错误

时间:2016-02-04 16:39:35

标签: python unicode

不确定我在这里做错了什么,但有了这个:

# -*- coding: utf-8 -*-

class Foo(object):
    CURRENCY_SYMBOL_MAP = {"CAD":'$', "USD":'$', "GBP" : "£"}

    def bar(self, value, symbol="GBP"):
        result = u"%s%s" % (self.CURRENCY_SYMBOL_MAP[symbol], value)
        return result

if __name__ == "__main__":
    f = Foo()
    print f.bar(unicode("19.00"))

我明白了:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    print f.bar(unicode("19.00"))
  File "test.py", line 7, in bar
    result = u"%s%s" % (self.CURRENCY_SYMBOL_MAP[symbol], value)
  UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

这是Python 2.7.6

PS - 我认为像Babel这样的库可以将事物作为货币进行格式化,我的问题更多的是关于unicode字符串和%运算符。

2 个答案:

答案 0 :(得分:3)

确保您插入的字符串也是Unicode。

CURRENCY_SYMBOL_MAP = {"CAD":u'$', "USD":u'$', "GBP" : u"£"}

答案 1 :(得分:1)

您正在尝试将非unicode字符串插入到unicode字符串中。您只需要在CURRENCY_SYMBOL_MAP unicode对象中创建值。

# -*- coding: utf-8 -*-

class Foo(object):
    CURRENCY_SYMBOL_MAP = {"CAD":u'$', "USD":u'$', "GBP" : u"£"}  # this line is the difference

    def bar(self, value, symbol="GBP"):
        result = u"%s%s" % (self.CURRENCY_SYMBOL_MAP[symbol], value)
        return result

if __name__ == "__main__":
    f = Foo()
    print f.bar(unicode("19.00"))