Я работаю с приложением, которое читает файл json в течение нескольких месяцев.
Неожиданно на некоторых устройствах он начал давать сбой.(Устройства, на которых он действительно работал раньше ...)
Я использую это для чтения файла json (Не знаю, является ли это лучшим способом сделать это, но, как я уже сказал, он работал нормально ввсе устройства):
InputStream inputStream = getResources().openRawResource(R.raw.default_json_file);
String jsonString = new Scanner(inputStream).useDelimiter("\\A").next();
На устройствах, где происходит сбой, это выглядит примерно так:
��{��
��
�� ��"��c��a��t��e��g��o��r��i��e��s��"��:�� ��[��
��
...
Вы можете прочитать что-то между символами that, которое выглядит как содержимое jsonно там не должно быть ничего ...
Так что, если я изменю его на использование UTF-16 следующим образом:
Scanner(inputStream, "UTF-16")
Он начинает работать на этих устройствах, но затем на других (Где это работает без указания какой-либо кодировки) я получаю что-то вроде этого:
笊ढ捡瑥杯物敳∺⁛ਉॻਉउ≮慭攢㨠≅慴楮朠慮搠摲楮歩湧∬ਉउ≩浡来猢㨠嬢敡瑩湧ㄢⰠ≥慴楮朲∬•敡瑩湧㌢Ⱐ≥慴楮朴∬•敡瑩湧㔢崊उ紬
Я проверил кодировку файла (OSX)
file ./res/raw/default_json_file
./res/raw/default_json_file: UTF-8 Unicode text
Так что это подтверждает, что UTF-8 - правильная кодировка (я полагаю, что по умолчанию используется классом Scanner)
Я пробовал в разных версиях API на эмуляторах, и это работает, похоже, не связано с версией Android.
Но в некоторых физических устройствах это не так,где он работает, самые последние, которые у меня есть (Samsung S8 +, S8 note ...)
Как можно, чтобы это перестало работать без каких-либо изменений ?, буквально оно работало в конце вторникаи не работает в начале среды и только на некоторых устройствах без видимой связи с версией Android.
Я действительно потерян с этим, похоже на какую-то черную магию, и я надеюсь, что смогунайти причину ...