ObjectOutput и ObjectInputStream - специальные символы

Мое приложение Android получает текстовые сообщения, используя BroadcastReceiver, Тогда он использует ObjectOutputStream чтобы отправить его на мой сервер, который получает его, конечно же, ObjectInputStream, Если я распечатываю сообщение в приложении Android и просматриваю его в LogCat, полученное сообщение отображается правильно. Все символы отображаются правильно. Но когда он отправляется через эти потоки объектов, он изменяется и больше не отображается правильно. Все специальные символы заменены на вопросительные знаки.

Например, я получил сообщение со значком большого пальца вверх. Я мог видеть это как значок в LogCat и в программном обеспечении для текстовых сообщений Android, но мой сервер получил его как вопросительный знак, и он был сохранен как два вопросительных знака в базе данных MySQL.

Как мне справиться с этими объектами с выходными и входными потоками?

Я отправляю сообщения не как текст, а как объекты. У меня есть класс под названием SMSMessage который содержит всю информацию сообщения. Я отправил это используя сокет.

1 ответ

Звучит как проблема с кодировкой. Символы обычно преобразуются в знак вопроса или поле (или знак вопроса внутри поля), если они не могут быть представлены в конкретной кодировке. Вы можете увидеть это в действии, создав файл, содержащий буквы "äöå" в кодировке ISO-8859-15 и открыв его как UTF-8 в текстовом редакторе.

Однако, насколько я помню, ObjectStreams не должен портить кодировку. Вы можете попробовать использовать другие потоки, кроме ObjectStreams (я предполагаю, что Android не ограничен ими) и указать подходящую кодировку (UTF-8, UTF-16), чтобы проверить, правильно ли он проходит.

Другие вопросы по тегам