Кириллица не отображается корректно в терминале 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: Привет, мир!