###AndroidStudioのKotlinREPLウィンドウでマルチバイト文字を使えるようにしたいです。
AndroidStudio(Kotlin)で学習しだしたばかりのプログラミング初心者です。
AndroidStudioのKotlinREPLのウィンドウで、基礎的な部分の学習をしているのですが、ソース内にマルチバイト文字(日本語)を使うとエラーが出てしまい、先に進めません。
原因と解決方法をご教示いただけないでしょうか?
どうぞ、よろしくお願いいたします。
発生している問題・エラーメッセージ
//下記のエラーが出てしまいます。 Internal error occurred. Please, send report to developers. Internal error occurred. Please, send report to developers. exception: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:281) at kotlin.io.ConsoleKt.tryDecode(Console.kt:203) at kotlin.io.ConsoleKt.readLine(Console.kt:166) at kotlin.io.ConsoleKt.readLine(Console.kt:153) at org.jetbrains.kotlin.cli.jvm.repl.reader.IdeReplCommandReader.readLine(IdeReplCommandReader.kt:22) at org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal.one(ReplFromTerminal.kt:97) at org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal.doRun(ReplFromTerminal.kt:71) 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:171) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:104) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:57) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:96) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:71) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:39) at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:204) at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMain(CLITool.kt:196) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler$Companion.main(K2JVMCompiler.kt:348) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.main(K2JVMCompiler.kt)
該当のソースコード
// マルチバイトを使わないで記述したコード fun name() { println("nanako") } name() nanako //nanakoと表示されて正しく動いていますが、 //マルチバイト(日本語)を使うと。。。。 fun name() { println("ななこ") } name() //求める値の”ななこ”と表示されずに、 //上記に記載したエラーが出てしまいます。
試したこと
初心者ゆえ、試したことと言ってもandroidStudioの使い方やREPLのハウツーなど、ネットや書籍で近そうなものを探したのですが、どうにも見つけられませんでした。
補足情報(FW/ツールのバージョンなど)
仕様環境は
AndroidStudio3.3.2を、Win10で動かしています。
Windows環境がないので手元で試せないのですが、プロジェクトの文字コード設定はUTF-8になっていますか?「Preferences」→「Editor」→「File Encoding」と開いて確認してみてください。
ありがとうございます。こちらでかくにんすると、「Preferences」というのが見つけられないのですが、
メニューバーから、「File」→「Setting」→(別ウィンドウ)→「Editor」→「FileEncording」と進んだ中にある
「GlobalEncording」と「ProjectEnording」は、ともにUTF-8になっています。
うーん、そうするとIDEの設定は無視してJVMのデフォルト設定を見に行ってそうですね。
試しに、REPL上で
println(System.getProperty("file.encoding"))
を実行すると何が出力されますか?
お返事、ありがとうございます。
上記の
println(System.getProperty("file.encoding"))
をKotlinREPLで実行すると、
MS932
と表示されます。どういう意味でしょうか??
JVMとやり取りするデータの文字コードがMS932である、という風にJVMの設定がされているということです。参考: https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_72/rzaha/charenc.html
REPL実行時のオプションでfile.encodingを指定できればいいのですが、どうやらそういう設定をすろところはなさそうですね。。
なるほど~。
ご丁寧に、ありがとうございます。参考のURLも読ませていただきました。
さすがに、初心者の私にはまだ、敷居が高いようで。不勉強を痛感します。
でも、なんとなく、理解ができて、不安から少し解放されました。ありがとうございます。