概要
- Kotlin Standard Library に含まれている java.io.File.readText を使用
- 文字エンコーディング UTF-8, EUC-JP, Shift_JIS のテキストファイルを読み込む
サンプルコード cat.kts
import java.io.File
val pathUtf8 = args[0]
val pathEucjp = args[1]
val pathShiftjis = args[2]
println("UTF-8 : ${pathUtf8}")
println(File(pathUtf8).readText(Charsets.UTF_8))
println("EUC-JP : ${pathEucjp}")
println(File(pathEucjp).readText(charset("EUC-JP")))
println("Shift_JIS : ${pathShiftjis}")
println(File(pathShiftjis).readText(charset("Shift_JIS")))
println("windows-31j : ${pathShiftjis}")
println(File(pathShiftjis).readText(charset("windows-31j")))
読み込むテキストファイル (UTF-8, EUC-JP, Shift_JIS) を用意
UTF-8, EUC-JP, Shift_JIS のテキストファイルを用意。Shift_JIS (Windows-31J, CP932: Microsoft Windows Codepage 932) のファイルには文字化けしがちな文字を入れておく。
$ cat utf8.txt
さんぷる
サンプル
SANNPURU
$ nkf -E eucjp.txt
さんぷる
サンプル
SANNPURU
$ nkf -S shiftjis.txt
さんぷる
サンプル
SANNPURU
①㈱髙
サンプル実行結果
サンプルコードを実行。
$ kotlinc -script cat.kts utf8.txt eucjp.txt shiftjis.txt
UTF-8 : utf8.txt
さんぷる
サンプル
SANNPURU
EUC-JP : eucjp.txt
さんぷる
サンプル
SANNPURU
Shift_JIS : shiftjis.txt
さんぷる
サンプル
SANNPURU
�@�棋�
windows-31j : shiftjis.txt
さんぷる
サンプル
SANNPURU
①㈱髙
Shift_JIS のテキストファイルは、charset に "Shift_JIS" を指定したら見事に文字化けしている。 "windows-31j" を指定すると文字化けしない。
動作確認環境
Kotlin 1.3.0 + Java 11.0.1 + macOS Mojave 10.14.1
$ kotlin -version
Kotlin version 1.3.0-release-212 (JRE 11.0.1+13-LTS)
$ kotlinc -version
info: kotlinc-jvm 1.3.0 (JRE 11.0.1+13-LTS)
$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
$ uname -mrsv
Darwin 18.2.0 Darwin Kernel Version 18.2.0: Fri Oct 5 19:41:49 PDT 2018; root:xnu-4903.221.2~2/RELEASE_X86_64 x86_64
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.1
BuildVersion: 18B75
参考資料
- Kotlin でコマンドラインの Hello World アプリケーション - Qiita
- readText - Kotlin Programming Language
- charset - Kotlin Programming Language
- JDK 11 Documentation - Internationalization Guide - Supported Encodings
- Java Platform Standard Edition 8 Documentation - Java™ Internationalization Support - Supported Encodings
- Java Platform Standard Edition 8ドキュメント - Java(tm)の国際化サポート - サポートされているエンコーディング
- Microsoftコードページ932 - Wikipedia
- 本当は怖くないCP932 - Qiita
- 【 nkf 】コマンド――文字コードと改行コードを変換する:Linux基本コマンドTips(51) - @IT