![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| i_SweP |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
Скачиваю страницу, код такой:
В результате на странице пять - десять рандомных квадратиков, типа такого: "Санкт-Пете��бург" (через браузер всё ОК) Почему так получается? Это сообщение отредактировал(а) i_SweP - 26.10.2010, 20:10 |
|||
|
||||
| jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 2 Всего: 75 |
Потому что Вы читаете символы как байты, да еще и используете строки как контейнеры массивов байт, чего делать не следует. Раз вас интересуют символы, так читайте символы при помощи Reader:
Во избежание проблем рекомендуется также задавать Reader'у кодировку, у него есть конструктор, который помимо потока принимает еще и кодировку. Если явно её не задать, считывание будет происходить в кодировке по умолчанию, которая совершенно необязательно должна совпадать с кодировкой запрашиваемой страницы. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
Я так понимаю что прочтенные данные пойдут дальше в поток os, я предлагаю сделать так:
Не используя строковый буффер. |
|||
|
||||
| i_SweP |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
jk1,
Проблема ушла, спасибо. Честно говоря new String это было на скорую руку. Видать конструктор String не всегда нормально понимает байтовый массив. Kircul, Sorry за Это сообщение отредактировал(а) i_SweP - 28.10.2010, 19:04 |
|||
|
||||
| jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 2 Всего: 75 |
Дело ведь не в конструкторе, а в самой идее: Вы превращаете в строку не весь массив, а по частям. Каждый символ в зависимости от кодировки может быть закодирован несколькими байтами, и даже переменным количеством байт. Вот не повезет Вам в очередной раз, разрежете искусственным буфером
символ пополам и все, в каждой из двух строк он невалиден. Тут надо использовать посимвольное чтение с учетом кодировки, чтобы не резать байтовый массив в неудачных местах. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
| Kircul |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
Однозначно моя промашка. В общем идея была такая, если в программе не нужно обробатывать скачаную страницу, то считывать бинарные данные из is.
Но если нужно обрабатывать скачаные данные как строку, то вероятнее всего лучше использовать вариант предложеный jk1, т.е. обернуть Stream в Reader. |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |