Я собираю данные с устройств пользователей для аналитики. У меня есть конечные статические строки, представляющие имена событий (например, «banner_click»). По мере возникновения соответствующего события имя события хранится в базе данных sqlite, после чего я периодически читаю их из базы данных в JsonObject и делаю HTTP-запрос для отправки собранных данных на наш сервер, но иногда мы получаем поврежденные имена событий («banner_clÄ ± ck «вместо« banner_click »,« i »заменяется на« İ ± »во всех таких случаях). Этот случай случается редко, но меня это беспокоит. Поэтому я хотел бы знать, как постоянная строка будет повреждена, я не могу воспроизвести ее сам. До сих пор я догадываюсь, что это проблема, связанная с устройством.Постоянная Java String повреждена в Android
2
A
ответ
4
i
в вашем click
фактически ı
т.е. латинского ПИСЬМО Dotless И. UTF-8 для него 0xc4 0xb1
и интерпретации этих байт, как ISO-8859-1 дает ı
.
Исправить персонаж, который будет обычным
i
.Обратите внимание на кодировку символов при работе с не-ASCII.
Как правильно исправить персонаж, который будет регулярным? У меня просто класс с определенными строковыми константами. И почему это не происходит постоянно, если есть такая проблема? – mdavid
У вас, скорее всего, есть точечный код где-то в вашем коде. – laalto
Вы описали наиболее вероятный случай, но я не могу найти ни одной точки меньше «i» в своем коде, я не знаю, как я мог бы даже напечатать это. Я проверяю «i» на клавиатуре, и он интерпретируется как «U + 0069», который является нормальным штриховым строчным «i». – mdavid