【问题】
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