В настоящее время я делаю школьный проект, в котором мне нужно загрузить данные с веб-сайта (путем сканирования) и обработать / отобразить их в приложении для Android. Загруженные данные часто содержат буквы типа ä
, которые безошибочно отображаются в TextView
.
Иногда в данных, которые я получаю, есть пробелы, которые мой парсер заполняет после загрузки. Вместо отображения textThatContainsÄ
отображается
. Легко исправить:
String data = downloadFromServer();
// Fill the gap
data = data.replace(" ", textThatContainsÄ);
Выход, как и ожидалось:
Output: [..]ä[..]
Логика, которую я написал выше, была упакована в .jar
и импортирована в мое приложение для Android. Загруженные данные никак не затрагиваются приложением Android из-за инкапсуляции.
Теперь наступает поворот. Если загруженные данные с сервера НЕ изначально содержат textThatContainsÄ
(так что мой анализатор должен заполнить пробел), Android интерпретирует их как textThatContainsä
, что явно является проблемой кодирования UTF-8
, которая вызвано обработкой UTF-8
байтов как Windows-1252 (or ISO 8859-1)
байтов (Android интерпретирует текст как 21 вместо 18 байтов (размер текста 9)). Эта проблема не возникает, если данные изначально содержат ä
.
Я не знаю, почему ä
, сгенерированный Java-кодом, создает проблемы кодирования в Android.
Редактировать: было вызвано Gradle.