1.总结

我找不到如何在AppVeyor构建中使用非ascii符号的方法。

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.实际行为

My AppVeyor build failed:

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.没有帮助
  • 我在# -*- coding: utf-8 -*-文件
  • 的顶部添加SashaAppVeyorEncoding.py
  • 我将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"
    

    我的updated AppVeyor build:

    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

    最佳答案

    看来python不会打印到AppVeyor的控制台上-输出已重定向。因此,在打印到标准输出时, locale.getpreferredencoding() 用于将Unicode文本编码为字节。 cp1252仅支持一百万个Unicode字符中的几个。要在此处更改sys.stdout.encoding,您可以 set PYTHONIOENCODING=utf-8 envvar-utf-8字符编码支持所有Unicode字符。

    10-02 07:10