日期:2014-05-20  浏览次数:20677 次

map的问题,其实还是编码的问题.......
我从一文本文件根据文件编码读入数据,然后解析,放到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了
------解决方案--------------------
没遇到过。。。学习下