CP932について

CP932 (Windows Codepage 932) について調べたことの備忘録。

Java で任意のシフトJISコードのStringインスタンスを得るには下記のようにする。

    int sjis_code = 0xFBFC; // U+9AD9 '髙' (はしごだか), シフトJIS 0xFBFC
    List<Integer> byteList = new ArrayList<Integer>();
    int b0 = ((sjis_code >> 8) & 0xFF);
    int b1 = (sjis_code & 0xFF);
    if (0x40 <= b1 && b1 <= 0xFC) {
        if (b0 > 0) {
            byteList.add(b0);
        }
        byteList.add(b1);
        
        StringBuilder sb = new StringBuilder();
        for (Integer b : byteList) {
            sb.append("%").append(String.format("%x", b));
        }
        String encoded = sb.toString();

        String symbol = new org.apache.commons.codec.net.URLCodec().decode(encoded, "ms932");
        // symbol は有効なUnicodeの文字か、U+FFFD (Unicodeにマッピングできる文字がないとき)になる
    } else {
        // シフトJISの範囲外
    }