【发布时间】:2017-07-27 10:02:26
【问题描述】:
1。总结
我不知道如何将非 ascii 符号用于 AppVeyor 构建。
2。设置
我的简单SashaAppVeyorEncoding.py文件:
print('Саша наилучшая!')
我的简单appveyor.yml文件:
environment:
matrix:
- PYTHON: "C:\\Python36-x64"
PYTHON_VERSION: "3.6.3"
PYTHON_ARCH: "64"
PIP: "C:\\Python36-x64\\Scripts\\pip"
platform: x64
build_script:
- cmd: "%PYTHON%\\python SashaAppVeyorEncoding.py"
我以 UTF-8 编码保存的两个文件。
3。预期行为
如果我在终端或解释器 SublimeREPL 中运行 SashaAppVeyorEncoding.py 文件,我会得到:
D:\SashaPythonista>python SashaAppVeyorEncoding.py
Саша наилучшая!
如果我的SashaAppVeyorEncoding.py 文件不包含西里尔符号:
print('Sasha superior!')
AppVeyor 构建successful passed:
Build started
git clone -q --branch=master https://github.com/Kristinita/SashaPythonista.git C:\projects\sashapythonista-7l3yk
git checkout -qf 3a0393a5b9548a5debabebfc5e28d17f3000a768
%PYTHON%\python SashaAppVeyorEncoding.py
Sasha superior!
Discovering tests...OK
Build success
4。实际行为
Build started
git clone -q --branch=master https://github.com/Kristinita/SashaPythonista.git C:\projects\sashapythonista-7l3yk
git checkout -qf 262cef287d45b1548640b9a773b680de90b7d138
%PYTHON%\python SashaAppVeyorEncoding.py
Traceback (most recent call last):
File "SashaAppVeyorEncoding.py", line 1, in <module>
print('\u0421\u0430\u0448\u0430 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0430\u044f!')
File "C:\Python36-x64\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-3: character maps to <undefined>
Command exited with code 1
5。没有帮助
- 我在
SashaAppVeyorEncoding.py文件的顶部添加# -*- coding: utf-8 -*-, - 我add
chcp 65001命令到appveyor.yml文件, - 我install
win-unicode-console到appveyor.yml文件,
我更新的SashaAppVeyorEncoding.py 文件:
# -*- coding: utf-8 -*-
print('Саша наилучшая!')
我更新的appveyor.yml 文件:
environment:
matrix:
- PYTHON: "C:\\Python36-x64"
PYTHON_VERSION: "3.6.3"
PYTHON_ARCH: "64"
PIP: "C:\\Python36-x64\\Scripts\\pip"
platform: x64
install:
- cmd: "%PIP% install win-unicode-console"
- cmd: chcp 65001
build_script:
- cmd: "%PYTHON%\\python SashaAppVeyorEncoding.py"
Build started
git clone -q --branch=master https://github.com/Kristinita/SashaPythonista.git C:\projects\sashapythonista-7l3yk
git checkout -qf 11df07d4c424cd8e28a1b0db0f43906aa63f42f1
Running Install scripts
%PIP% install win-unicode-console
Collecting win-unicode-console
Downloading win_unicode_console-0.5.zip
Installing collected packages: win-unicode-console
Running setup.py install for win-unicode-console: started
Running setup.py install for win-unicode-console: finished with status 'done'
Successfully installed win-unicode-console-0.5
chcp 65001
Active code page: 65001
%PYTHON%\python SashaAppVeyorEncoding.py
Traceback (most recent call last):
File "SashaAppVeyorEncoding.py", line 2, in <module>
print('\u0421\u0430\u0448\u0430 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0430\u044f!')
File "C:\Python36-x64\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-3: character maps to <undefined>
Command exited with code 1
6。当地环境
操作系统和版本:
Windows 10 企业版 LTSB 64 位 EN
Python:
3.6.3
chcp:
活动代码页:65001
【问题讨论】:
-
看来输出被重定向了。试试
set PYTHONIOENCODING=utf-8envvar。不相关:1-在 Python 3 中不需要# -*- coding: utf-8 -*-(默认设置)2-在 Python 3.6 中不需要 win-unicode-console(写入控制台时 sys.stdout 使用 Unicode API)3-你不需要chcp 65001(它可能是有害的)Unicode API 可以工作,不管 chcp 值。只需在控制台中配置字体。见Python, Unicode, and the Windows console -
@jfs: 移动
set PYTHONIOENCODING=utf-8作为答案,我可以提高你的声誉。它帮助我。谢谢。
标签: python python-3.x unicode python-3.6 appveyor