输出重定向/管道上的python故障

时间:2019-01-31 07:36:25

标签: python encoding utf-8

在我下面的python代码中

# coding: utf-8
# generate.py
my_locale = [
            {
                'tag':'test_tag_long__body',
                'locale':'en_US',
                'text': u"Hello,<br>\n"
                        u"\n"
                        u"<br>\n"
                        u"\n"
                        u"We’re contacting you.\n"
                        u"\n"
                        u"<br>\n"
                        u"\n"
                        u"Sincerely,<br>\n"
                        u"\n"
                        u"<br>\n"
                        u"\n"
                        u"Team<br>\n"
            },
            {
                'tag':'test_tag_long__subject',
                'locale':'en_US',
                'text': 'Important information'
            },
        ]

print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
print "<strings>"
for item in my_locale:
    print "<string>"
    print "<tag>" + item['tag'] + "</tag>"
    print "<locale>" + item['locale'] + "</locale>"
    print "<text><![CDATA["
    print  item["text"]
    print "]]>"
    print "</text>"
    print "</string>"
print "</strings>"

当我以python generate.py运行时,它运行正常,没有错误。但是,每当我通过管道传输或重定向输出时,都会出现错误

python generate.py | pbcopy
Traceback (most recent call last):
  File "generate2.py", line 34, in <module>
    print  item["text"]
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 20: ordinal not in range(128)

我在这里错过任何重要的东西吗?

1 个答案:

答案 0 :(得分:0)

尝试在过程开始时添加以下三行代码:

import sys
reload(sys)
sys.setdefaultencoding('utf8')

我也遇到了您的问题:这是由于字符串中存在带重音符号的字母(或非ASCII字符):您的变量“ item [” text“] ”似乎是utf-8编码。 我尝试使用某些库提出的各种编码和解码方法。 在我看来,唯一有效的解决方案是我向您指出的解决方案。 我希望它也对您有用。