Моя операционная система — Windows 10, а кодовая страница системы по умолчанию — GBK. Версия JDK — 21, а версия Gradle — 8.5. Я использую chcp 1252 для изменения кодировки консоли. Чтобы проверить System.out.charset процесса демона gradle, я использую System.out.print(System.out.charset()) в build.gradle, это «utf-8», а свойство VM stdout .encoding процесса демона Gradle — 1252. Если я запускаю файл класса, который выводит System.out.charset с помощью команды Java, выходные данные System.out.charset и stdout.encoding будут равны 1252. Почему вывод демона Gradle не равно stdout.encoding?
что я пробовал: Сначала я думал, что это потому, что stdout.encoding не поддерживает указанный мной набор символов. Однако запуск файла класса, который выводит System.out.charset напрямую с помощью команды Java, показывает, что указанный мной набор символов поддерживается. Я ожидал, что System.out.charset должен равняться stdout.encoding. Пожалуйста, простите меня за мой плохой английский.
В чем же настоящая проблема, какова ЦЕЛЬ?
@dan1st Никаких других настроек кодировки, кроме использования chcp для установки консоли на 1252. По умолчанию system.out.charset должно быть равно свойству jvm stdout.encoding. Но почему они не равны в процессе демона gradle? Изменил ли демон gradle System.out?
Помогает ли установка системного свойства демона stdout.encoding
?
@Slaw Это не работает, что бы я ни указывал, System.out.charset по-прежнему UTF-8
Настройки вашего демона Gradle не зависят от настроек вашего приложения. Если вы хотите изменить некоторую кодировку в своем приложении, вам нужно изменить аргументы JVM приложения, а не аргументы JVM демона Gradle.
Возможно, было бы неплохо предоставить минимально воспроизводимый пример.
В конечном итоге найденный в исходном коде gradle, gradle изменяет выходной поток с помощью System.setOut, поэтому System.props "stdout.encoding" не соответствует System.out.charset(). Кроме того, gradle также изменяет «stdout.encoding» в Sytem.props, что приводит к несоответствию с кодировкой консоли.
Как вы устанавливаете кодировку? И почему вы ожидаете, что кодировка Gradle будет соответствовать кодировке приложения Java?