Python:单击Package - 遇到非ASCII字符和问题; CMD.EXE

时间:2017-11-22 17:02:42

标签: python encoding click command line

我正在使用Click Python包编写命令行工具: http://click.pocoo.org/5/

这是非常有用的,但我不能解决一个问题,即当我输入非ASCII字符作为我的命令行工具的参数时,它总是会给我编码错误:enter image description here < / p>

是的,我知道python中的encode()和decode(),但正如你在我的代码中看到的那样,我在任何地方都没有触及这个字符串。

这是我的控制台的错吗?我在这里错过了任何设置吗?我正在使用Windows 7 cmd.exe并且知道Windows喜欢他自己的文件名编码等。我是否必须使用另一个控制台?尝试了同样结果的python。

单击文档说明所有字符串都被视为Unicode ...

我非常感谢你的帮助。 安装点击就像 pip install点击

一样简单

亲切的问候,

Marcurion

我的代码:

w

1 个答案:

答案 0 :(得分:0)

我发现它,不得不在其他导入语句之上添加它(所有行都很重要):

#!/usr/bin/python -S

import sys
reload(sys)
sys.setdefaultencoding("cp1252")
import site

cp1252是

向我报告的编码
import locale
print locale.getpreferredencoding()

然而,当我得到它时,我的“name”参数的编码不是cp1252,必须找到chardet lib( pip install chardet )它实际上是ISO-8859-9。因为我想用这个参数创建一个文件夹,我把它编码回cp1252:

#!/usr/bin/python -S

import sys
reload(sys)
sys.setdefaultencoding("cp1252")
import site

import click
from click_shell import shell
import os

import locale
import chardet

@shell(prompt='Tool > ', intro='some test...', hist_file=os.path.dirname(os.path.realpath(__file__)))
def stRec():
    pass



@stRec.command()
@click.argument('name', required=True, type=click.STRING)
def set(name):
    # Create folder in the folder running this script
    folderPath = os.path.join(os.path.split(os.path.abspath(__file__))[0], name)
    folderPath = folderPath.decode(str(chardet.detect(bytes(folderPath))['encoding'])).encode(locale.getpreferredencoding())
    if not os.path.exists(folderPath):
        os.makedirs(folderPath)




if __name__ == '__main__':
    stRec()