Androidのアプリ開発関連のブログ

Javaの内部文字コードはUTF-8で日本語もcharに入る

制作中のSSHクライアントでのマルチバイト文字の表示をやった。

受信データを1byteずつ処理してるから、
new String(byte[],String);
で第2引数に文字コードを渡して、tryでエラーになったらbyte不足。
ってな処理にしようとしたんだが、非対応byteでもエラーでずにStringにできちゃうんだねw


というわけで他の方法にしたが、以前作ったテキストエディターでは、
InputStreamReaderで文字コードを指定してBufferedReaderを介して読んで、
read()値をcharにキャストしてStringBufferに追加して行ってた。
当時は理解してたのかもしれないが、そのコード見て、
InputStreamReaderは文字コードの指定ができるから適切なサイズのint値がreadできるとは理解できるが、charに日本語入らないよね?

と思ったんだが、上のやり方で正しいんだね。
Javaの内部文字コードはUTF-8ではなくてUTF-16が使われている。UTF-8で日本語は3byteだが、UTF-16では2byteで日本語が入る。
Javaのcharは1byteではなく2byteでUTF-16のマルチバイト文字が入っちゃう。
InputStreamReaderで文字コードを指定すればUTF-16に変換したint値を送ってくれる。
って感じかね。


制作物でのマルチバイト文字はUTF-8なら表示できるようになったんで、
あとはユーザーがUTF-8以外の文字コードを設定できるようにするつもり。
入力の方もソフトキーならマルチバイトのUTF-16になってるのかな?
キーが押されるたびに処理してるが、UTF-16が取得できるなら、変換は容易そう。
Androidの場合物理キーでマルチバイト文字ってどうなってるんだろうか?物理キーのほうが面倒かもしれない。