Android отображает текст в неправильной кодировке после обновления до Java 8

Я обновил свой проект до SDK версии 24 и Java 8 и столкнулся со странной проблемой кодирования.

По какой-то странной причине Android обрабатывает мои жестко закодированные строки UTF-8 как Windows-1251, и поэтому текст искажен.

Как это:

введите описание изображения здесь

Это то, что я изменил:

compileSdkVersion 24
buildToolsVersion "24.0.2"

compileOptions {
    encoding = 'utf-8'
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

И что я пробовал:

  • изменена кодировка в настройках Android Studio
  • добавлены compileOptions.encoding = 'windows-1251' и compileOptions.encoding = 'utf-8'
  • добавлена ​​системная переменная JAVA_TOOL_OPTIONS:-Dfile.encoding=UTF8

Если я вернусь к Java 7, все в порядке.

Есть идеи?

2 ответа

Решение

Это ошибка в компиляторе Джека, посмотрите на этот пост.

Джек использовал кодировку виртуальной машины по умолчанию, которая в Windows - windows-1252. Итак, ваш текст закодирован UTF-8 и расшифровывается с windows-1252 компилятором Джека, и именно поэтому они стали искаженными.

До сих пор, Gradle Plugin не поддерживает API для установки формата декодирования, поэтому нам нужно подождать...

У меня была такая же проблема в Windows(но не в Mac OSX). эта линия решит мою проблему gradle.properties вашего проекта):

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

обратите внимание, что эта часть изменяет кодировку:

-Dfile.encoding=UTF-8
Другие вопросы по тегам