解决JAVA,properties loadFromXML读取中文XML乱码的方法

来源:互联网 发布:io域名怎么注册 编辑:程序博客网 时间:2024/05/22 11:45

环境:服务端编码 “gb2312" ;客户端  andriod 4.2.1;

按照SUN的格式,在服务器端输出对应模板的XML如下(省略头),

<properties>

  <entry key="ID">2768</entry>
  <entry key="pageID">16</entry>
  <entry key="tilel">关于申报2014年政府专项资金购买社会组织服务项目的通知</entry>
  <entry key="click0">97</entry>
  <entry key="source">社会办</entry>

......

</properties>


通过:InputStreamReader inputStreamReader = new InputStreamReader( httpURLConnection.getInputStream(), "gb2312");

在手机端还原”gb2312"编码XML字节流正常,但通过properties loadFromXML建立MAP后,读取中文键值出现零星乱码,找不着规律。

由于学习JAVA时间太短找不到底层原因,无奈之下,编写了替代读取XML到MAP的转换函数:

public static void loadStringXML(string   resultDataString   ) {

  String string = resultDataString;//XML流字符串。
  String startstrString = "<entry key=\"";
  String endstr = "</entry>";
  int[] start = new int[1024];//长度取决于由服务端条目数据量 下同
  int[] end = new int[1024];
  String[] str = new String[1024];
  String[] strkey = new String[1024];
  String[] strvalue = new String[1024];

  int count = 0;// 记录切割次数
  int index = string.length();

//分两次切割: 首先entry字符串组;
  for (int i = 0; i < 1024; i++) {
   if ((end[i] = string.lastIndexOf(endstr, index)) != -1) {
    start[i] = string.lastIndexOf(startstrString, index);
    str[i] = string.substring(start[i] + 12, end[i]);
    index = start[i] - 2;
    // System.out.println(str[i]);
    count++;
   } else {
    break;
   }
  }

// 二次分割出Key,Value;
  for (int j = 0; j < count; j++) {
   int k = 0;
   k = str[j].indexOf("\">");
   strkey[j] = str[j].substring(0, k);
   strvalue[j] = str[j].substring(k + 2);
   pxml.put(strkey[j], strvalue[j]);//pxml :外部定义的静态MAP接收对象 
  }
  }

再次调用pxml键值显示在手机Text.View控件。成功解决局部乱码,完毕。


0 0
原创粉丝点击