【问题】
python代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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:
1 2 | 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