2015-04-08 1 views
2

Я собираю данные с устройств пользователей для аналитики. У меня есть конечные статические строки, представляющие имена событий (например, «banner_click»). По мере возникновения соответствующего события имя события хранится в базе данных sqlite, после чего я периодически читаю их из базы данных в JsonObject и делаю HTTP-запрос для отправки собранных данных на наш сервер, но иногда мы получаем поврежденные имена событий («banner_clÄ ± ck «вместо« banner_click »,« i »заменяется на« İ ± »во всех таких случаях). Этот случай случается редко, но меня это беспокоит. Поэтому я хотел бы знать, как постоянная строка будет повреждена, я не могу воспроизвести ее сам. До сих пор я догадываюсь, что это проблема, связанная с устройством.Постоянная Java String повреждена в Android

ответ

4

i в вашем click фактически ı т.е. латинского ПИСЬМО Dotless И. UTF-8 для него 0xc4 0xb1 и интерпретации этих байт, как ISO-8859-1 дает ı.

  1. Исправить персонаж, который будет обычным i.

  2. Обратите внимание на кодировку символов при работе с не-ASCII.

+0

Как правильно исправить персонаж, который будет регулярным? У меня просто класс с определенными строковыми константами. И почему это не происходит постоянно, если есть такая проблема? – mdavid

+0

У вас, скорее всего, есть точечный код где-то в вашем коде. – laalto

+0

Вы описали наиболее вероятный случай, но я не могу найти ни одной точки меньше «i» в своем коде, я не знаю, как я мог бы даже напечатать это. Я проверяю «i» на клавиатуре, и он интерпретируется как «U + 0069», который является нормальным штриховым строчным «i». – mdavid