ISO-8859-1
日本語 | 国際標準化機構8859-1 |
英語 | International Organization for Standardization-8859-1 |
ふりがな | あいえすおーはちはちごきゅーのいち |
フリガナ | アイエスオーハチハチゴキューノイチ |
文字コードのひとつ。
ASCIIに、ウムラウト等の付いた文字の入った拡張部分を含むもの。つまりASCIIの8ビット版。
IANAによって指定された名称である。"latin1"と同じ文字コードである。
この文字コードをそのまま使うことは少ない。
この文字コードは、Stringクラスの中に、他の文字コードが混ざってしまった場合に、それを「byte型の配列としてそのまま取り出す」ために使用することが多い。
Stringクラス内の文字列は、「絶対にUnicodeでなければならない」とされる。Stringクラスは、内部の文字列をUnicodeとして扱うためである。
しかし、Webアプリケーションの場合には、バグ等によってUnicode以外の文字コードの文字列がStringクラスに格納されてしまう場合がある。これは、画面から渡される文字コードの変換ミスによるものである。
そういった場合のデバッグ時には、このStringクラスの中に格納された文字列を、全く変更せずに直接byte型の配列として取得する必要がある。
その場合に指定するのがこの"ISO-8859-1"である。この文字列をStringクラスのgetBytes()メソッドの引数に渡すことで、中身を変更することなく、byte型の配列として取得することができる。
このbyte型の配列は、もし「正しい文字コード」が分かっているのなら、Stringクラスのコンストラクタの第1引数に配列を、第2引数に「正しい文字コード」を渡すことで変換することができる。
ASCIIに、ウムラウト等の付いた文字の入った拡張部分を含むもの。つまりASCIIの8ビット版。
IANAによって指定された名称である。"latin1"と同じ文字コードである。
この文字コードをそのまま使うことは少ない。
この文字コードは、Stringクラスの中に、他の文字コードが混ざってしまった場合に、それを「byte型の配列としてそのまま取り出す」ために使用することが多い。
Stringクラス内の文字列は、「絶対にUnicodeでなければならない」とされる。Stringクラスは、内部の文字列をUnicodeとして扱うためである。
しかし、Webアプリケーションの場合には、バグ等によってUnicode以外の文字コードの文字列がStringクラスに格納されてしまう場合がある。これは、画面から渡される文字コードの変換ミスによるものである。
そういった場合のデバッグ時には、このStringクラスの中に格納された文字列を、全く変更せずに直接byte型の配列として取得する必要がある。
その場合に指定するのがこの"ISO-8859-1"である。この文字列をStringクラスのgetBytes()メソッドの引数に渡すことで、中身を変更することなく、byte型の配列として取得することができる。
このbyte型の配列は、もし「正しい文字コード」が分かっているのなら、Stringクラスのコンストラクタの第1引数に配列を、第2引数に「正しい文字コード」を渡すことで変換することができる。
参考サイト
// Sample.java
import java.io.UnsupportedEncodingException;
public class Sample
{
public static void main( String[] args )
{
try
{
// 文字コード「シフトJIS」での「あいう」を、そのままStringクラスに渡します。
byte[] source = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 };
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( source, "ISO-8859-1" );
// ここまでの処理は、通常は、Webアプリケーションで画面から入力された
// 文字列が格納される場合等に行われます。
// 画面からはシフトJISで渡されているのに、それを変換せずに格納されて
// しまった、という場合です。
// 中には、シフトJISの文字コードの文字が直接入っているので、出力すると変になります。
// いわゆる「文字化け」です。
System.out.println( string );
// ???¢??
// その場合、getBytes()の引数に"ISO-8859-1"を渡すことで、そのまま
// Unicodeと見なさず、直接byte型の配列として取得できます。
byte[] bytes = string.getBytes( "ISO-8859-1" );
// これで、バイト配列として取得できました。
// もし、その文字コードが分かっている場合には、Stringクラスの
// コンストラクタの、第2引数に渡すことで正しい文字コードで
// 格納することができます。
string = new String( bytes, "Shift_JIS" );
System.out.println( string );
// あいう
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード
// (上記の例では「ISO-8859-1」や「Shift_JIS」)が、Javaではサポート
// されていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
}
}
import java.io.UnsupportedEncodingException;
public class Sample
{
public static void main( String[] args )
{
try
{
// 文字コード「シフトJIS」での「あいう」を、そのままStringクラスに渡します。
byte[] source = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 };
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( source, "ISO-8859-1" );
// ここまでの処理は、通常は、Webアプリケーションで画面から入力された
// 文字列が格納される場合等に行われます。
// 画面からはシフトJISで渡されているのに、それを変換せずに格納されて
// しまった、という場合です。
// 中には、シフトJISの文字コードの文字が直接入っているので、出力すると変になります。
// いわゆる「文字化け」です。
System.out.println( string );
// ???¢??
// その場合、getBytes()の引数に"ISO-8859-1"を渡すことで、そのまま
// Unicodeと見なさず、直接byte型の配列として取得できます。
byte[] bytes = string.getBytes( "ISO-8859-1" );
// これで、バイト配列として取得できました。
// もし、その文字コードが分かっている場合には、Stringクラスの
// コンストラクタの、第2引数に渡すことで正しい文字コードで
// 格納することができます。
string = new String( bytes, "Shift_JIS" );
System.out.println( string );
// あいう
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード
// (上記の例では「ISO-8859-1」や「Shift_JIS」)が、Javaではサポート
// されていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
}
}
// Sample.java import java.io.UnsupportedEncodingException; public class Sample { public static void main( String[] args ) { try { // 文字コード「シフトJIS」での「あいう」を、そのままStringクラスに渡します。 byte[] source = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 }; // 文字コードの変換はStringクラスのコンストラクタで行います。 // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。 // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。 // そうするとUnicodeに変換されて格納されます。 String string = new String( source, "ISO-8859-1" ); // ここまでの処理は、通常は、Webアプリケーションで画面から入力された // 文字列が格納される場合等に行われます。 // 画面からはシフトJISで渡されているのに、それを変換せずに格納されて // しまった、という場合です。 // 中には、シフトJISの文字コードの文字が直接入っているので、出力すると変になります。 // いわゆる「文字化け」です。 System.out.println( string ); // ???¢?? // その場合、getBytes()の引数に"ISO-8859-1"を渡すことで、そのまま // Unicodeと見なさず、直接byte型の配列として取得できます。 byte[] bytes = string.getBytes( "ISO-8859-1" ); // これで、バイト配列として取得できました。 // もし、その文字コードが分かっている場合には、Stringクラスの // コンストラクタの、第2引数に渡すことで正しい文字コードで // 格納することができます。 string = new String( bytes, "Shift_JIS" ); System.out.println( string ); // あいう } catch( UnsupportedEncodingException e ) { // StringクラスのコンストラクタがUnsupportedEncodingException例外を // 投げるので拾います。第2引数で渡された文字コード // (上記の例では「ISO-8859-1」や「Shift_JIS」)が、Javaではサポート // されていない文字コードの場合にエラーとなります。 e.printStackTrace(); } } }