我从一文本文件根据文件编码读入数据,然后解析,放到map里如下:
- Java code
//判断文件编码CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();detector.add(new ParsingDetector(false));detector.add(JChardetFacade.getInstance());detector.add(ASCIIDetector.getInstance());detector.add(UnicodeDetector.getInstance());java.nio.charset.Charset charset = null;try { charset = detector.detectCodepage(sourseFile.toURL());} catch (Exception ex) { ex.printStackTrace();}if (charset != null) { chartsetName=charset.name();} else { chartsetName="UTF-8";}//读入文本文件BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),chartsetName));while (in.ready()) { str = in.readLine().trim(); if (str.trim().equals("")) { break; } HashMap map=new HashMap(); //解析 String sno = str.substring(0, 16).trim(); ..... //放入map backMap.put(sno, myObj);}
然后,我从数据库里读取相关信息,得到sno1,
- Java code
Obj objTmp=backMap.get(sno1);
这个时候,虽然sno1和当时put的sno一样,但是就是取不到obj,调试程序跟踪,没有发现乱码,sno字段,都是数字型的字符串,在调试是确实看到sno1和map里的一样,sno和sno1的前后空格都去掉了......
我的项目是utf-8,文本文件也是utf-8,如果我的文本文件换个编码,用记事本保存的时候选择asni就没有问题,请问什么原因?如何保证不管文件是什么编码都不会错误?
------解决方案--------------------
如果你的sno1 和sno 都是ascii字符那就和编码没有关系
------解决方案--------------------
首先保证读取文本出来不是乱码,并且跟从数据库中读取出来是一样的。看看他们的hashcode是否一致
------解决方案--------------------
不了解, 关注下
------解决方案--------------------
UE 存储的时候 类型问题 ,你用 UTF-8 编辑的文本带BOM了,选择不带BOM就OK了
------解决方案--------------------
没遇到过。。。学习下