在远程http服务器上,我在Sublime text2中创建test.xml文件,并使用utf-8编码保存。
<?xml version='1.0' encoding='Utf-8' ?>
<Shops>
<Shop name="one"></Shop>
<Shop name="two" ></Shop>
<Shop name="three"></Shop>
</Shops>
然后我在我的设备上下载:
String str="";
URL url = new URL(Server+urls);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1)
{
baf.append((byte) current);
}
str = new String(baf.toByteArray(),"Utf-8");
DataOutputStream out = null;
out = new DataOutputStream(openFileOutput(filename, Context.MODE_PRIVATE));
out.writeUTF(str);
out.close();
之后,通过DDMS文件浏览器,我将它下载到我的macbook上,在Sublime text2中打开,然后看到:
008e 3c3f 786d 6c20 7665 7273 696f 6e3d
2731 2e30 2720 656e 636f 6469 6e67 3d27
5574 662d 3827 203f 3e0d 0a3c 5368 6f70
733e 0d0a 203c 5368 6f70 206e 616d 653d
226f 6e65 223e 3c2f 5368 6f70 3e0d 0a20
3c53 686f 7020 6e61 6d65 3d22 7477 6f22
203e 3c2f 5368 6f70 3e0d 0a20 3c53 686f
7020 6e61 6d65 3d22 7468 7265 6522 3e3c
2f53 686f 703e 0d0a 3c2f 5368 6f70 733e
然后我选择使用编码utf-8重新打开,然后看到(顺便说一下,我无法复制/浏览我看到的内容):
答案 0 :(得分:0)
我不确定你为什么要转换为/到字节,但这个问题可能是StAX的一个很好的候选者。
查看阅读和写作部分。
答案 1 :(得分:0)
.writeUTF
使用modified UTF-8,而非UTF-8。
0x00 0x8e
是XML的长度无符号短整数,为142,与实际长度142匹配。
使用此:
str = new String(baf.toByteArray(),"UTF-8");
OutputStreamWriter osw = new OutputStreamWriter(
openFileOutput(filename, Context.MODE_PRIVATE),
Charset.forName("UTF-8").newEncoder()
);
osw.write(str);