javaの日本語処理ではまっています。

場所1: 既存の文字エンコーディングから,(Javaの内部コードである)Unicodeに変換する段階.たとえば,ファイルの読み込み,javacやjasperによるコンパイル,native2asciiによるUnicodeエスケープへの変換などの段階です.
場所2: Unicodeから,任意の文字エンコーディングに変換する段階.たとえば,ServletJSPによる出力などです.
場所3: WebブラウザがHTTPリクエストを受け取って処理する段階.

URI エスケープ、機種依存文字

Shift_JISを表している → SJIS
Windows-31Jを表している → MS932(Windows PCの場合), CP943(IBM OS/2 Japanese),CP943C
EUC-JPを表している → eucJP(Solaris PCの場合)

よくRDMBSなんかで、localeをDB独自で実装する事がありますが、Rの場合に
ついて考えてみると、CP932(MS-SJIS)では半角カナは1byteです。普段Linux
を使っているので、考えが及びませんでしたが、isalpha(半角カナ)はTrueに
なります。(localeの実装依存ですが)したがって、~