2013-03-04 1 views
1

Я разрабатываю приложение, работающее на устройствах Android и iOS. Для этого приложения мне нужно получить XML-поток из URL-адреса. Этот XML не очень безопасно, потому что некоторые строки, например:Почему Java BufferedReader не работает как NSData Objective-C?

Откровении

Станет:

Rvlation

Конечно Я знаю, что лучше всего исправить скрипт генератора XML. Но я работаю только разработчиком фирмы и не имею к ней доступа, поэтому на данный момент я стараюсь делать все, что в моих силах, с тем, что у меня есть.

Теперь вот почему в этой теме. Когда я положил эти данные в объект NSData Объективный-C в:

NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]]; 

А затем попытаться прочитать каждый байт:

NSUInteger len = [data length]; 
Byte *byteData = (Byte*)malloc(len); 
memcpy(byteData, [data bytes], len); 
for(int i = 0 ; i < len ; i++) 
{ 
    NSLog(@"%d",byteData[i]); 
} 

Это правильно отображает INT значение полукокса, особый характер или нет. Тогда я просто должен обработать (unichar)byteData[i], чтобы решить эту проблему.

Нет с Java и Android, я пытаюсь выполнить базовую операцию BufferedReader.

URL myURL = new URL(url); 
BufferedReader in = new BufferedReader(new InputStreamReader(myURL.openStream())); 

Затем распечатайте каждый Char ИНТ один за другим:

int i; 
while((i = in.read()) != -1) System.out.print(i); 

Но с Java, делая это, я сразу же получить идентификатор замещающего Чара (65533) вместо хорошей, и не может удастся заменить его.

Любая идея? Спасибо, что прочитал меня.

+3

В Java нет необходимости создавать «BufferedReader» для чтения XML. Запустите синтаксический анализатор XML непосредственно в 'InputStream', он сам обработает кодировку. – Sulthan

ответ

6
BufferedReader in = new BufferedReader(
     new InputStreamReader(myURL.openStream(), "UTF-8")); 
  • InputStreams являются для байтов, двоичных данных.

  • Читатели для символов, строка, текст.

InputStreamReader мосты эта концептуальная разница, эти слов, кодирующие двоичные данные в, и имеет дополнительный параметр для кодирования. Кодировка по умолчанию - это стандартная платформа, которая не очень переносима.

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