MS932(Java) + JA16SJIS(Oracle)的情况下,有些字会出现乱码。
这个问题,是由于Shift-JIS和MS932对这些字的unicode映射不同造成的。
比如: ~   SJIS:U+301C   MS932:U+FF5E
虽然,MS932是微软在Shift JIS的基础上,扩展的13区和89-92区以及115-119的编码,但在个别字符的映射上仍有不同。
在一些相关的网站上可以看到一些总结,这些字符如下
~   SJIS:U+301C   MS932:U+FF5E
∥   SJIS:U+2016   MS932:U+2225
-   SJIS:U+2212   MS932:U+FF0D
¢   SJIS:U+00A2   MS932:U+FFE0
£   SJIS:U+00A3   MS932:U+FFE1
¬   SJIS:U+00AC   MS932:U+FFE2

至于验证方法,可以到unicode.org上查找相关的mapping文件,进行比较。
对于本问题,可以比较SHIFTJIS.TXT和CP932.TXT
针对MS932(Java) + JA16SJIS(Oracle)的情况,有人提出了把ORACLE的编码设为JA16SJISTILDE的解决方法。
没有试过,不过可以借鉴。