在 TravisCI 上的 2.7.10 应用程序中打印 unicode 字符时更正 unicode 错误
Correcting unicode errors when printing unicode chars in a 2.7.10 app on TravisCI
我正在尝试在 TravisCI 上使用 Python 2.7.10 在测试 运行ner 中打印一些 unicode 字符。
在本地 (macOS),我可以 运行 这样做就好了:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
class MyTestCase(unittest.TestCase):
def my_test(self):
for x in alist:
# a long running op
# updates item in list
sys.stdout.write('█')
for x in alist:
if x.success:
print(" ✓ pass {}".format(x.name))
else:
print(" x fail {}".format(x.name, x.err))
但是当我将它推送到 TravisCI 时,它总是失败并出现那个讨厌的 ordinal not in range(128)
错误。
我试过:
- 将 Travis 环境变量设置为
LC_ALL
:C.UTF-8
- 使用
dist: trusty
- 使用
deploy: \ default_text_charset: 'utf-8'
- 使用
six.u()
,但会抱怨 TypeError: decoding Unicode is not supported
这是我的。travis.yml:
language: python
dist: trusty
python:
- 2.7.10
install:
- pip install --quiet future
- pip install --quiet pyyaml
- pip install --quiet dotmap
script:
- cd appdir; python -m unittest tests
deploy:
default_text_charset: 'utf-8'
在Python2中,sys.stdout.write
取字节串。如果你给它 unicode
,它会将它们强制为 str
,这显然在这里失败了,因为使用了 ASCII。
您可以将 sys.stdout
包装在 TextIOWrapper
中(就像在 Python 3 中所做的那样):
import io
sys.stdout = io.open(sys.stdout.fileno(), 'w', encoding='utf8')
如果不想覆盖,请将其保存为其他名称sys.stdout
。
我正在尝试在 TravisCI 上使用 Python 2.7.10 在测试 运行ner 中打印一些 unicode 字符。
在本地 (macOS),我可以 运行 这样做就好了:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
class MyTestCase(unittest.TestCase):
def my_test(self):
for x in alist:
# a long running op
# updates item in list
sys.stdout.write('█')
for x in alist:
if x.success:
print(" ✓ pass {}".format(x.name))
else:
print(" x fail {}".format(x.name, x.err))
但是当我将它推送到 TravisCI 时,它总是失败并出现那个讨厌的 ordinal not in range(128)
错误。
我试过:
- 将 Travis 环境变量设置为
LC_ALL
:C.UTF-8
- 使用
dist: trusty
- 使用
deploy: \ default_text_charset: 'utf-8'
- 使用
six.u()
,但会抱怨TypeError: decoding Unicode is not supported
这是我的。travis.yml:
language: python
dist: trusty
python:
- 2.7.10
install:
- pip install --quiet future
- pip install --quiet pyyaml
- pip install --quiet dotmap
script:
- cd appdir; python -m unittest tests
deploy:
default_text_charset: 'utf-8'
在Python2中,sys.stdout.write
取字节串。如果你给它 unicode
,它会将它们强制为 str
,这显然在这里失败了,因为使用了 ASCII。
您可以将 sys.stdout
包装在 TextIOWrapper
中(就像在 Python 3 中所做的那样):
import io
sys.stdout = io.open(sys.stdout.fileno(), 'w', encoding='utf8')
如果不想覆盖,请将其保存为其他名称sys.stdout
。