Кириллица не отображается корректно в терминале 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 шт):
Сначала я пытался решить проблему установкой кодировки 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: Привет, мир!