【问题】Python中用Chardet检测出来从Windows的cmd中输入的字符串的编码是KOI8-R,而不是所希望的GBK或GB2312

【问题】

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 327  : INFO     inputStrEnc=KOI8-R

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 动物

encInfo= {‘confidence’: 0.99, ‘encoding’: ‘GB2312’}

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的编码。



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量