当前位置: 代码迷 >> J2SE >> map的有关问题,其实还是编码的有关问题.
  详细解决方案

map的有关问题,其实还是编码的有关问题.

热度:95   发布时间:2016-04-24 12:12:49.0
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了
------解决方案--------------------
没遇到过。。。学习下
  相关解决方案