【问题标题】:Kotlin println special charactersKotlin println 特殊字符
【发布时间】:2018-10-22 10:55:04
【问题描述】:

我想在 Kotlin 中打印一些特殊字符(拉丁语、希腊字母、中文等),但总是得到 ??????? 作为输出:

>> println("Δ")
>> ??????

也试过unicode:

>> println("\u0394")
>> ?

我使用的IDE:IntelliJ IDEA 2018.1.3。

我使用的控制台:Kotlin REPL。

jdk:9.0.4

Kotlin 版本:1.2.31 (JRE 9.0.4+11)

如何打印正确的字符串?


更新(20180512):

我还尝试通过 Homebrew 安装 Kotlin 并在我自己的终端中运行 kotlinc,它按预期工作。它只是在 IntelliJ 的 Kotlin REPL 中不起作用。有什么地方可以解决吗?


更新(20180513):

尝试了以下方法:

  1. 清除 IntelliJ 缓存;
  2. 重新安装 IntelliJ;
  3. 使 IntelliJ 和 Kotlin 保持最新;
  4. 重启MacOS(10.12.6);
  5. 将 Java 更新到 10.0.1。

在Kotlin REPL中再次使用println???改成具体错误:

println("Δ")
Internal error occurred. Please, send report to developers.
exception: java.nio.charset.MalformedInputException: Input length = 1
    at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:281)
    at kotlin.io.ConsoleKt.tryDecode(Console.kt:198)
    at kotlin.io.ConsoleKt.readLine(Console.kt:162)
    at kotlin.io.ConsoleKt.readLine(Console.kt:149)
    at org.jetbrains.kotlin.cli.jvm.repl.reader.IdeReplCommandReader.readLine(IdeReplCommandReader.kt:22)
    at org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal.one(ReplFromTerminal.kt:98)
    at org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal.doRun(ReplFromTerminal.kt:69)
    at org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal.access$doRun(ReplFromTerminal.kt:38)
    at org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal$Companion.run(ReplFromTerminal.kt:175)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:105)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:63)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:107)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:96)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:72)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:38)
    at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:171)
    at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMain(CLITool.kt:162)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler$Companion.main(K2JVMCompiler.kt:329)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.main(K2JVMCompiler.kt)

Internal error occurred. Please, send report to developers.

Process finished with exit code 2

似乎读字符编码与写编码不同。但是我找不到配置 Kotlin REPL 编码的方法。

而且,当我打开 Kotlin REPL 时,我发现 2 个 java 进程正在运行,每次我必须杀死一个才能顺利运行 Kotlin REPL

image: 2 java processes running

我不确定它们是否相关,所以我附上了图片作为参考。已向 IntelliJ 开发人员报告,但对于大多数人来说,这似乎不是一个常见的错误。

【问题讨论】:

  • 将其复制并粘贴到 IntelliI 中,对我来说效果很好。可能是平台问题?
  • 尝试将 intellij 设置中的编码更改为 UTF-8
  • @msrd0 我使用 utf-8 作为全局编码以及项目编码,但仍然无法正常工作。另外,我使用了 Kotlin REPL 控制台,因此出现错误时没有创建文件...

标签: intellij-idea kotlin special-characters println


【解决方案1】:

尝试运行println("\u0394")。如果可行,您的文件可能不是 UTF-8 编码。如果不是,则说明您的终端有问题。

【讨论】:

  • 如果OP可以在保存后打开文件并且仍然看到字符,那么问题不可能在源代码级别。但是,可能是编辑器和编译器之间的编码不匹配。
  • 谢谢@Cristan。我尝试使用 unicode 但仍然失败......但是当我通过下载Command Line Compiler 使用自己的终端时它可以工作。它只是在 IntelliJ 的 Kotlin REPL 中不起作用......关于 IntelliJ 配置的任何想法?
  • @y.bedrov 谢谢,会的:)
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 2022-07-05
  • 2014-11-03
  • 2016-01-16
  • 1970-01-01
  • 2015-07-10
  • 2011-02-24
  • 2016-02-09
相关资源
最近更新 更多