2013-01-17 2 views
0

На удаленном http-сервере я создаю файл test.xml в Sublime text2 и сохраняю его с помощью кодировки utf-8.Загрузить xml-файл с сайта на android, неверный код

<?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, открытый в Блистательной 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 и увидел (кстати, я не могу копировать/пропустить то, что видел):

enter image description here

+1

, который выглядит как BOM – njzk2

ответ

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); 
0

Я не совсем уверен, почему вы конвертируете из/в байты, но эта проблема может быть хорошим кандидатом для StAX.

Оформить заказ на чтение и запись.

Смежные вопросы