python输出重定向/管道失败

8 浏览
0 Comments

python输出重定向/管道失败

在我的以下Python代码中:\n# coding: utf-8\n# generate.py\nmy_locale = [\n {\n \'tag\':\'test_tag_long__body\',\n \'locale\':\'en_US\',\n \'text\': u\"Hello,
\\n\"\n u\"\\n\"\n u\"
\\n\"\n u\"\\n\"\n u\"We’re contacting you.\\n\"\n u\"\\n\"\n u\"
\\n\"\n u\"\\n\"\n u\"Sincerely,
\\n\"\n u\"\\n\"\n u\"
\\n\"\n u\"\\n\"\n u\"Team
\\n\"\n },\n {\n \'tag\':\'test_tag_long__subject\',\n \'locale\':\'en_US\',\n \'text\': \'Important information\'\n },\n ]\nprint \"\"\nprint \"\"\nfor item in my_locale:\n print \"\"\n print \"\" + item[\'tag\'] + \"\"\n print \"\" + item[\'locale\'] + \"\"\n print \"\"\n print \"\"\nprint \"\"\n当我运行它作为“python generate.py”时,它可以正常运行,没有错误。然而,每当我使用管道或重定向输出时,它就会出错\n

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

\n我是否遗漏了什么重要的东西?

0
0 Comments

问题出现的原因是字符串中存在有重音字母(或非ASCII字符),导致无法正常输出或重定向。解决方法是在程序的开头添加以下三行代码:

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

这段代码可以解决问题,因为它将系统的默认编码设置为UTF-8,从而确保能够正确处理包含重音字母或非ASCII字符的字符串。

需要注意的是,这种解决方法并不被推荐。更好的替代方案是设置PYTHONIOENCODING环境变量。关于这个问题的背景信息可以在这里找到。

总之,为了解决Python在输出重定向或管道时出现的编码问题,可以尝试在程序开头添加上述代码或设置PYTHONIOENCODING环境变量。

0