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), чтобы проверить, правильно ли он проходит.