Кириллица не отображается корректно в терминале PowerShell и в IDE на Windows 11 в Kotlin проекте

Когда работал над Kotlin + Gradle проектом В IntelliJ IDEA (IDE) на Windows 11, столкнулся с проблемой. Когда я пытался вывести в консоль текст на русском языке, я получал знаки вопроса вместо символов кириллицы.

В IDE, при открытии терминала автоматически выбирался PowerShell 5. Файлы исходного кода в кодировке UTF-8.

Main.kt

package org.example

fun main() {
    println("EN: Hello world!")
    println("RU: Привет, мир!")
}

Корневой build.gradle.kts

plugins {
    kotlin("jvm") version "2.2.0"
    application
}

println("GRADLE EN: Hello world!")
println("GRADLE RU: Привет, мир!")

group = "org.example"
version = "1.0-SNAPSHOT"

application {
    mainClass.set("org.example.MainKt")
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation(kotlin("test"))
}

tasks.test {
    useJUnitPlatform()
}

kotlin {
    jvmToolchain(21)
}

settings.gradle.kts

plugins {
    id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "CyrillicTextExample"

При открытии терминала и выполнении команды ./gradlew run я получал одинаковый для PowerShell 5 и 7 вывод:

> Configure project :
GRADLE EN: Hello world!
GRADLE RU: Привет, мир!

> Task :run
EN: Hello world!
RU: ??????, ???!

При запуске проекта из IDE (нажатием кнопки Debug или Run) получал вывод:

> Configure project :
GRADLE EN: Hello world!
GRADLE RU: Привет, мир!

> Task :org.example.MainKt.main()
EN: Hello world!
RU: ??????, ???! 

Как исправить проблему?


Ответы (1 шт):

Автор решения: Casper

Сначала я пытался решить проблему установкой кодировки UTF-8 и у меня получилось сделать так, чтобы в консоли правильно отображался текст из кода приложения, из println("Кириллица").

Починить вывод в IDE в консоль мне удалось, добавив такие параметры в корневой

build.gradle.kts.

// ...
tasks.withType<JavaExec>().configureEach {
    jvmArgs(
        "-Dfile.encoding=UTF-8",
        "-Dsun.stdout.encoding=UTF-8",
        "-Dsun.stderr.encoding=UTF-8"
    )
}

tasks.withType<JavaCompile>().configureEach {
    options.encoding = "UTF-8"
}

Это помогло при запуске проекта из IDE (нажатием кнопки Debug или Run). Вместо знаков вопросов в консоль стал выводиться текст:

> Task :org.example.MainKt.main()
EN: Hello world!
RU: Привет, мир!

Если открыть терминал, то там проблема осталась:

> Configure project :
GRADLE EN: Hello world!
GRADLE RU: Привет, мир!

> Task :run
EN: Hello world!
RU: Привет, мир!

Нашёл в интернете решение, которое починило отображение кириллицы. Всё заработало даже без конфигурирования в build.gradle.kts.

В Windows 11 нужно сделать следующее (инструкция с английской локализацией, у меня такая):

  • Открыть окно Settings. Например, можно нажать правую кнопку мыши на кнопку Start (Пуск) и в контекстном меню нажать на Settings
  • В окне Settings выбрать пункт Time & language
  • В списке найти и нажать на Language & region
  • В списке найти и нажать на Administrative language settings
  • В открывшемся окне с заголовком Region. Нажать на кнопку Change system locale... внутри области с заголовком Language for non-Unicode programs
  • В открывшемся окне выбрать элемент списка Russian в выпадающем списке с заголовком Current system locale и ниже поставить галочку Beta: Use Unicode UTF-8 for worldwide language support.
  • Будет предложено перезагрузить компьютер. Перезагружаем.

После этого у меня в консоли без проблем отображалась кириллица без каких-либо дополнительных настроек в Gradle файлах и других местах.

Результат из терминала командой ./gradlew run и из IDE:

> Configure project :
GRADLE EN: Hello world!
GRADLE RU: Привет, мир!

> Task :run
EN: Hello world!
RU: Привет, мир!
→ Ссылка