dポイントプレゼントキャンペーン実施中!

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"));
}
}
%>

そもそも
「バイト配列とは何か」
「なんで必要なのか?」
など、わかりやすく説明していただけると幸いです。

A 回答 (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")の部分で余計におかしくならないかが心配ですが。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!