【问题】
python代码:
newParser = argparse.ArgumentParser(description="Extarct yupoo picture info and download picture from input tag."); newParser.add_argument("-f", "--tagFile", dest="tagFile", default="tags.txt", help="File that store tags, speparated by comma"); #newParser.add_argument("-l", "--tagListStr", dest="tagListStr", default="20121202,天平山赏红枫", help="in command para, speparated by comma"); newParser.add_argument("-l", "--tagListStr", dest="tagListStr", help="in command para, speparated by comma"); args = newParser.parse_args(); argsDict = args.__dict__; for eachArg in argsDict.keys(): exec(eachArg + " = args." + eachArg); #init outpu dir if(os.path.isdir(gConst['picStorePath']) == False) : os.makedirs(gConst['picStorePath']);# create dir recursively #init tag list if(tagListStr): inputStrEnc = crifanLib.getStrPossibleCharset(tagListStr); logging.info("inputStrEnc=%s", inputStrEnc);
cmd中运行结果是:
xxx.py -l 下雪喽 LINE 329 : INFO From input string, tags=обя╘Ю╤ |
其中,当前环境是:
win7 x64
cmd默认编码是GBK
此处,inputStrEnc应该是,之前是可以正常输出的,GB2312,才对。
但是,此处却是KOI8-R
【解决过程】
1.之前,是可以在当前cmd中输入中文的
至少是从notepad++所打开的UTF-8的文件中,拷贝粘贴到cmd中,
然后可以获得正确的
inputStrEnc=GB2312
的,但是现在却不行了。
2.即使是Notepad++把文件转换为ANSI编码,拷贝过来的,也还是问题依旧。
3.去调试,发现用chardet:
encInfo = chardet.detect(inputStr); print "encInfo=",encInfo;
检测出来的结果是:
encInfo= {‘confidence’: 0.6826397542769941, ‘encoding’: ‘KOI8-R’} |
4.然后用
结果运行结果是正常所希望的:
xxx.py -l 动物 LINE 327 : INFO inputStrEnc=GB2312 LINE 329 : INFO From input string, tags=动物 |
5.所以,此处,难道:
下雪喽
这三个字,对于chardet,比较特殊,无法正常检测出来是GB2312,GBK?
【总结】
目前原因未知,
不知道为何通过cmd中输入的:
下雪喽
会被chardet
识别为:
{‘confidence’: 0.6826397542769941, ‘encoding’: ‘KOI8-R’}
而不是cmd的当前GBK/GB2312的编码。
转载请注明:在路上 » 【问题】Python中用Chardet检测出来从Windows的cmd中输入的字符串的编码是KOI8-R,而不是所希望的GBK或GB2312