MCPcopy Create free account
hub / github.com/cxasm/notepad-- / scanFileRealCode

Method scanFileRealCode

src/CmpareMode.cpp:988–1069  ·  view source on GitHub ↗

扫描文件的字符编码,不输出文件 扫描多少行scanLineNum 默认100 如果是-1 之前全部扫描

Source from the content-addressed store, hash-verified

986//扫描多少行scanLineNum 默认100
987//如果是-1 之前全部扫描
988CODE_ID CmpareMode::scanFileRealCode(QString filePath, int scanLineNum)
989{
990 QFile file(filePath);
991 file.open(QIODevice::ReadOnly);
992
993 CODE_ID code = CODE_ID::UNKOWN;
994 int lineNums = 0;
995
996 bool isExistGbk = false;
997 bool isExistUnKownCode = false;
998 bool isExistUtf8 = false;
999
1000
1001 while (!file.atEnd()) {
1002
1003 LineFileInfo lineInfo;
1004
1005 QByteArray line = file.readLine();
1006
1007 lineInfo.lineNums = lineNums;
1008
1009 /* 这种方式读取文件会包含后面的行尾 */
1010 //int length = line.length();
1011
1012 //第一行时,检测一下文件编码,返回值也是文件的编码
1013 if (0 == lineNums)
1014 {
1015 recognizeTextCode(line, lineInfo, lineInfo.unicodeStr);
1016 code = (CODE_ID)lineInfo.code;
1017
1018 //已经找到文本的标签,相信标签,之前返回
1019 if (code == CODE_ID::UNICODE_BE || code == CODE_ID::UNICODE_LE || code == CODE_ID::UTF8_BOM || code == CODE_ID::GBK)
1020 {
1021 break;
1022 }
1023
1024 }
1025 else
1026 {
1027 /*对于头部没有标识的行,需要每行进行详细检查,比较耗时
1028 *对于第一行已经是GBK的编码,标识出所有的确是GBK的行号
1029 *严格来说,如果以后要做国际版,不应该只考虑GBK,而是要考虑本地ASNI编码。
1030 *对中国而言,本地ASNI编码是GBK,对其它国家,比如日本/韩国而言,这些ASNI是它们本国
1031 *对应的本地编码。
1032 */
1033 recognizeTextCode(line, lineInfo, lineInfo.unicodeStr);
1034
1035 if (CODE_ID::UTF8_NOBOM == lineInfo.code)
1036 {
1037 isExistUtf8 = true;
1038 }
1039 else if (CODE_ID::GBK == lineInfo.code)
1040 {
1041 //如果发现存在GBK,则要以GBK作为字符编码。这里识别gbk是因为显示的时候,需要转化gbk进行显示
1042 isExistGbk = true;
1043 }
1044 else if (CODE_ID::UNKOWN == lineInfo.code)
1045 {

Callers

nothing calls this directly

Calls 1

closeMethod · 0.80

Tested by

no test coverage detected