2013-06-26 5 views
2

Я пишу сервер Java, который берет данные с другого сервера. К сожалению, часть строки, которую он выбрасывает, не может быть «проанализирована» программой. System.out.print печатает его как знак вопроса ?Symbol parsing hell in Java

Этот несчастный знак вопроса не может быть проанализирован парсером JSON моего клиента. Кто-нибудь знает, как я могу его удалить?

Пробовал str.replace с символом ? не работал.

+0

Можем ли мы увидеть код, который печатает символ? Вы используете «Char (int)»? – JREN

+1

Получают ли данные, полученные с другого сервера, на другом языке? Возможно, вам понадобится использовать соответствующую кодировку. – asgs

+0

Вы что-нибудь знаете о различных кодировках символов? – Andremoniy

ответ

2

Хорошо это работало для меня:

stringName.replaceAll("[^\\x00-\\x7F]", ""); 

Это из какой-то ответ на StackOverflow, но я не могу найти его сейчас.

+0

Не очень чистый, но до тех пор, пока вам нужны только символы US-ASCII, все в порядке. Любые неанглийские символы удаляются таким образом. Чистый путь больше похож на ответ Дариуша, но вам нужно как-то понять эту кодировку. –

4

Это похоже на проблему с кодировкой. Приложение использует одну кодировку, а сервер использует другую.

Использование класса Charset будет вашим ответом. Используйте его при преобразовании полученных данных в String. Скорее всего, вам придется указать его в конструкторе Reader, хотя я не могу сказать без какого-либо кода.

Вот ссылка на соответствующую документацию: InputStreamReader(InputStream, Charset)