メモの日々


2013年09月11日(水) [長年日記]

[java] UTF-8はStandardCharsets.UTF_8で指定できる

JavaのプログラムでUTF-8を指定したいときに、

java.nio.charset.Charset.forName("UTF-8")

の代わりに

java.nio.charset.StandardCharsets.UTF_8

と書けることを知ったのでメモ。StandardCharsetsクラスはJava 7で追加されたもののようだ。Pathクラスのjavadocを見ていて気付いた。

[java] java.util.Properties#store() はコメントのマルチバイト文字をエスケープする

Properties#store()はWriterに正しいCharsetを指定しておけばProperteisに設定した日本語をそのまま出力できるけど、store()に与えるcommentsについては日本語を \u 形式でエスケープして出力してしまう、ということをメモ(Java 1.7.0_25で確認)。なんでこうしてるんだ…

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Properties;

public class PropertiesWriter {
    public static void main(String[] args) throws IOException {
        Properties props = new Properties();
        props.setProperty("キー", "値");
        props.setProperty("パス", "c:\\テスト です");
        try (BufferedWriter writer = Files.newBufferedWriter(
                Paths.get("test.txt"), StandardCharsets.UTF_8)) {
            props.store(writer, "コメント");
        }
    }
}
#\u30B3\u30E1\u30F3\u30C8
#Wed Sep 11 17:27:48 JST 2013
パス=c\:\\テスト です
キー=値