今日のポカ
ちょっとしたポカ。
byte[] b = { (byte)8f, (byte)0xa2, (byte)0xc3 }; assertTrue(Arrays.equals(b, "\u00a6".getBytes("x-eucJP-Open")));
\u00a6
は0x8fa2c3
に変換さるべきなので、上記assertが成立すべきところ、成立しなかった。
問題はこれ。
(byte)8f
0xが抜けているだけだが、8fのfがfloatリテラルの接尾辞とみなされ、それがbyteにキャストされて普通にコンパイルできてしまっている。あほか。というか16進バイト列を書くのにキャストが必要なJavaのリテラルの表現力が残念である。