Android前后台传数据乱码,xml

来源:互联网 发布:值得买系统源码 编辑:程序博客网 时间:2024/05/29 15:23

Android前后台通讯是可能要传数据,但是经常出现乱码,下面这个是我的经历,是后台向前台传数据的过程中出现乱码。

我看了一下书本上关于乱码的解决方法,大概说的就是要保持前后台的编码方式一样,按照书本上的方法,我把前后台的编码方式都改成utf-8,但是问题依旧没有解决。最后还是在朋友的帮助下解决了,是用流的方法解决的。下面对两个方法进行对照下。

在第一个方法中,在前台接收后台的xmlstring时,用的是

result = EntityUtils.toString(httpResponse.getEntity());

再用自己定义的解析器解析result

XmlAlbum xmlAlbum=new XmlAlbum();

android.util.Xml.parse(new ByteArrayInputStream(result.getBytes("utf-8"))                                                                   , Encoding.UTF_8, xmlAlbum);

albumList=xmlAlbum.getAlbums();

结果在前台显示的时候出现乱码。

第二个方法是用流的形式接收的

InputStream stream = httpResponse.getEntity().getContent();

byte[] content = new byte[1024];

int length = 0;

while ((length = stream.read(content)) > 0) {

       result = new String(content, 0, length, "UTF-8");

}

stream.close();

XmlAlbum xmlAlbum=new XmlAlbum();

android.util.Xml.parse(new ByteArrayInputStream(result.getBytes("utf-8"))                                                                 , Encoding.UTF_8, xmlAlbum);

albumList=xmlAlbum.getAlbums();

这时候前后台就没有问题了,问题解决了。

在解决问题的过程中还出现了一个小插曲,我用w3c.dom方法在后台封装的xml传到前台,前台解析的时候出现了问题,调试发现是在xml文件中头中有这个一个属性standalone。最后用自己拼接的成的xml传到前台就没有问题了,不过这次写博客的时候,又重新用了一下w3c.dom的方法封装xml,前台还是用流接收的,结果没有出现问题,不知道是怎么个情况。还望大牛指教。先看下封装的效果吧

首先大家看下个后台数据行封装后打印的效果

1.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<albums>

<album>

<name>相册一</name>

<id>1</id>

</album>

<album>

<name>相册二</name>

<id>2</id>

</album>

<album>

<name>相册三</name>

<id>3</id>

</album>

<album>

<name>相册四</name>

<id>4</id>

</album>

<album>

<name>相册五</name>

<id>5</id>

</album>

<album>

<name>相册六</name>

<id>6</id>

</album>

</albums>

2.

<?xml version="1.0" encoding="UTF-8" ?>

<albums>

<album>

<name>相册一</name>

<id>1</id>

</album>

<album>

<name>相册二</name>

<id>2</id>

</album>

<album>

<name>相册三</name>

<id>3</id>

</album>

<album>

<name>相册四</name>

<id>4</id>

</album>

<album>

<name>相册五</name>

<id>5</id>

</album>

<album>

<name>相册六</name>

<id>6</id>

</album>

</albums>

首先xml文档的几个属性
xml:文档的声明

version:版本号

encoding:编码

standalone:是否自身验证, no 表示 XML 文档不是独立的而是依于外部所定的一个 DTD. yes 表示 XML 文档是自包含的(self-contained).

过对两个封装好的xml,大家很容易的发现,第二个封装成的xml没有standalone="no"。第一个是用自己博客文章中的方法封装的,用w3c.dom方法封装的,第二个是自己手动拼接成的。

原创粉丝点击