我正在使用Click Python包编写命令行工具: http://click.pocoo.org/5/
这是非常有用的,但我不能解决一个问题,即当我输入非ASCII字符作为我的命令行工具的参数时,它总是会给我编码错误: < / p>
是的,我知道python中的encode()和decode(),但正如你在我的代码中看到的那样,我在任何地方都没有触及这个字符串。
这是我的控制台的错吗?我在这里错过了任何设置吗?我正在使用Windows 7 cmd.exe并且知道Windows喜欢他自己的文件名编码等。我是否必须使用另一个控制台?尝试了同样结果的python。
单击文档说明所有字符串都被视为Unicode ...
我非常感谢你的帮助。 安装点击就像 pip install点击
一样简单亲切的问候,
Marcurion
我的代码:
w
答案 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()