• ベストアンサー

バイト配列 unicode

java初心者です。 以下のソースコードの 「new String(strVal.getBytes("ISO-8859-1"),"JISAutoDetect」 の部分の意味が分からなくこまっています。 <%@ page import="java.io.*" %> <%! public String strEncode(String strVal) throws UnsupportedEncodeingExcception{ if(strVal==null){ return null; }else{ return new String(strVal.getBytes("ISO-8859-1"),"JISAutoDetect")); } } %> そもそも 「バイト配列とは何か」 「なんで必要なのか?」 など、わかりやすく説明していただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

文字コードについてどの程度の知識をお持ちですか。 JavaのStringやcharで使われている文字コードは1文字=16ビット(2バイト)の固定長です (Unicodeのバージョンが上がってこの原則は一部崩れてしまいましたが)。'A'という文字も'亜'という文字も16ビットの値で表されます。 一方、世の中で広く使われている文字コードでは1文字を表すのに8ビット(1バイト)、16ビット(2バイト)、24ビット(3バイト)などが混在しています。たとえばShift_JISでは'A'は1バイト、'亜'は2バイトですし、UTF-8では'A'は1バイト、'亜'は3バイトで表されます。このような文字コードのデータをStringやcharで扱うのは不便なので、byteの配列に入れて扱います。 Shift_JISのbyte配列 ←→ Java String ←→ UTF-8のbyte配列 JavaのStringから各文字コードのbyte配列を得るにはgetBytes()を使用し、逆にbyte配列からStringを作るにはnew String(byte配列、エンコーディング名)を使います。 基本は上記の通りなのですが、ご質問の「new String(strVal.getBytes("ISO-8859-1"), "JISAutoDetect")」というのはさらに特殊な使い方です。 おそらく、strValには「文字コードを正しく設定できなかった日本語文字列のデータ」が入っているのでしょう。それを一度byte配列に戻してから"JISAutoDetect"で文字コードを判定して改めてStringに変換しているのだと思われます。getBytes("ISO-8859-1")の部分で余計におかしくならないかが心配ですが。

関連するQ&A