Atitit 乱码的检测与纠正总结
目录
1. Atitit.request 乱码的检测与解决 attilax总结 1
5.4. Str2list set的时候空字符检测与重整 5
1. Atitit.request 乱码的检测与解决 attilax总结
乱码
1.1. 乱码的检测,,可以检测,列徐俩个问好??
if(value.contains("??"))
value=v_oriagal
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
1.2. 使用常用汉字检测。如果发现常用汉字
使用常用汉字2500与英文大小写字母,数字以及附加一个小数点。检测阈值60
%
private static boolean isCoreectDecode(String s) {
// Strutil.toSet(compressableMimeType, string)
String f = "";
try {
f = FileUtils.readFileToString(new File(pathx.classPath() + File.separator + "com/attilax/web/2500.txt"),
"utf8");
} catch (IOException e) {
throw new RuntimeException(e);
}
f = f + "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.";
charset = strService.toSetNoSplitor(f);
List<String> li_sa =strService. toListNoSplitor(s);
int correctCnt = 0;
for (String ch : li_sa) {
if (charset.contains(ch))
correctCnt++;
}
if ((float) correctCnt / (float) s.length() > 0.6)
return true;
else
return false;
}
1.3. 英文大小写字母,数字以及附加一个小数点
1.4. 检测阈值60%
2. 乱码的纠正
2.1. 常用乱码探测
2.2. 决策树
2.3. 使用策略模式逐一探测常用编码
public static String getCorrectDecodeTxt(String s) {
if (isCoreectDecode(s))
return s;
else
{
String iso2gbk= encodeService.iso2gbk(s);
if(isCoreectDecode(iso2gbk))
return iso2gbk;
String iso2utf= encodeService.iso2utf(s);
if(isCoreectDecode(iso2utf))
return iso2utf;
String gbk2utf8= encodeService.gbk2utf8(s);
if(isCoreectDecode(gbk2utf8))
return gbk2utf8;
String utf2gbk= encodeService.utf2gbk(s);
if(isCoreectDecode(utf2gbk))
return utf2gbk;
}
return s;
}
2.4. Req map乱码的纠正
public static void setCorrectDecodeText(Map<String, Object> paramMap, String keys) {
String[] sa=keys.split(",");
for (String k : sa) {
try {
String correctDecodeTxt = encodeService.getCorrectDecodeTxt(paramMap.get(k).toString());
paramMap.put(k, correctDecodeTxt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. 调用 指定纠正乱码的列 为了稳定性
防止过纠正
public ModelVo weizhonRec_save() throws Exception{
ModelVo modelVo = new ModelVo();
Map<String,Object> paramMap =reqService.putMapByReqParams("VCF08,VAA07,VCF09,VCF65,VCF66,VCF67,VCF68,VCF69,VCF70,VCF09A,VCF18,VAA05,BCE03A,VAA01,VCF11,BCE01A,room",request1);
encodeService.setCorrectDecodeText(paramMap,"BCE03A,VCF65,VCF66,VCF67,VCF68,VCF69,VCF70");
// String correctDecodeTxt = encodeService.getCorrectDecodeTxt(s);
//try{
vaf2Bo.weizhonRec_save(paramMap);
4. 性能与稳定性
4.1. Cache guava
4.2. 调用foreach try catch
5. 保障正确性 与稳定性
5.1. 指定纠正列白名单机制
5.2. 字库文件编码侦测
5.3. 字库长度探测与提示
5.4. Str2list set的时候空字符检测与重整
5.5. 检测阈值开放
6. Ref
/honurse/src/com/attilax/web/encodeService.java
response设置编码的三种方式 - 微尘的世界 - ITeye技术网站.html
java检测乱码原编码 - CSDN博客.html todo
7. Mindchart
· 1. 乱码检测
· 1.1. 乱码的检测,,可以检测,列徐俩个问好?? 1
· 1.2. 使用常用汉字检测。如果发现常用汉字 2
· 1.3. 英文大小写字母,数字以及附加一个小数点 3
· 1.4. 检测阈值60% 3
· 2. 乱码的纠正 3
· 2.1. 常用乱码探测 3
· 2.2. 决策树 3
· 2.3. 使用策略模式逐一探测常用编码 3
· 2.4. Req map乱码的纠正 4
· 3. 调用 指定纠正乱码的列 为了稳定性 4
· 4. 性能与稳定性 5
· 4.1. Cache guava 5
· 4.2. 调用foreach try catch 5
· 5. 保障正确性 与稳定性 5
· 5.1. 指定纠正列白名单机制 5
· 5.2. 字库文件编码侦测 5
· 5.3. 字库长度探测与提示 5
· 5.4. Str2list set的时候空字符检测与重整 5
· 5.5. 检测阈值开放 5