ISO-2022-JP
日本語 | 国際標準化機構2022日本 |
英語 | International Organization for Standardization-2022-Japan |
ふりがな | あいえすおーにーぜろにーにーじぇーぴー |
フリガナ | アイエスオーニーゼロニーニージェーピー |
日本語用文字コードのひとつ。
一般に「JIS」と呼ばれる文字コード。
メールでよく使用される文字コード。逆に、ホームページや普通のテキストファイルではあまり使われない文字コードである。
特徴として、半角英数字と日本語の間に、境界となる3文字を挟むことで、この2つを明確に区別する点が上げられる。
半角英数字から日本語へと変わる境界にはは0x1B、0x24、0x42(ESC $ B)の3文字が挟まれる。また、日本語から半角英数字へと変わる境界には0x1B、0x28、0x42(ESC ( B)の3文字が挟まれる。0x1Bは制御コードのひとつで「ESC」という意味を持つ。
半角英数字の箇所はASCIIと同じ1バイト(7ビット)を使用する。
日本語の箇所は1バイト(7ビット)2つを使用して文字を表現する。
2つのバイトのうち、1バイト目を「リードバイト」、2バイト目を「トレイルバイト」と呼ぶ。
リードバイトのうち、ひらがなの部分は0x24であり、これはASCIIの「$」に該当するため、文字化けした文章の中で「$」が多数含まれていたら、それはISO-2022-JPということである。
「明確な境界」が存在することで日本語に使用できる整数値の範囲を狭めることができ、それにより、半角英数字及び日本語も含めて、すべて7ビットに収めることができる。
「7ビット」という範囲は、ASCIIと同じであり、ASCIIの範囲内の文字のみしか想定していないシステム内で日本語を取り扱うのに向いている。
そのこともあり、メールで日本語を送付する場合には、本文をISO-2022-JPに変換して送付する。
しかし、それ以外にはあまり使い道のない文字コードである。
ISO-2022-JPのIANAでの登録名は同じく"ISO-2022-JP"であり、Stringクラスのコンストラクタで渡す場合やgetBytes()メソッドに渡す場合には"ISO-2022-JP"を使用する。
一般に「JIS」と呼ばれる文字コード。
メールでよく使用される文字コード。逆に、ホームページや普通のテキストファイルではあまり使われない文字コードである。
特徴として、半角英数字と日本語の間に、境界となる3文字を挟むことで、この2つを明確に区別する点が上げられる。
半角英数字から日本語へと変わる境界にはは0x1B、0x24、0x42(ESC $ B)の3文字が挟まれる。また、日本語から半角英数字へと変わる境界には0x1B、0x28、0x42(ESC ( B)の3文字が挟まれる。0x1Bは制御コードのひとつで「ESC」という意味を持つ。
半角英数字の箇所はASCIIと同じ1バイト(7ビット)を使用する。
日本語の箇所は1バイト(7ビット)2つを使用して文字を表現する。
2つのバイトのうち、1バイト目を「リードバイト」、2バイト目を「トレイルバイト」と呼ぶ。
リードバイトのうち、ひらがなの部分は0x24であり、これはASCIIの「$」に該当するため、文字化けした文章の中で「$」が多数含まれていたら、それはISO-2022-JPということである。
「明確な境界」が存在することで日本語に使用できる整数値の範囲を狭めることができ、それにより、半角英数字及び日本語も含めて、すべて7ビットに収めることができる。
「7ビット」という範囲は、ASCIIと同じであり、ASCIIの範囲内の文字のみしか想定していないシステム内で日本語を取り扱うのに向いている。
そのこともあり、メールで日本語を送付する場合には、本文をISO-2022-JPに変換して送付する。
しかし、それ以外にはあまり使い道のない文字コードである。
ISO-2022-JPのIANAでの登録名は同じく"ISO-2022-JP"であり、Stringクラスのコンストラクタで渡す場合やgetBytes()メソッドに渡す場合には"ISO-2022-JP"を使用する。
参考サイト
// Sample.java
import java.io.UnsupportedEncodingException;
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// 文字コード「ISO-2022-JP」(IANAに登録している名前も同じ)
// での「AあB」をStringクラスに渡します。
byte[] source = new byte[]
{ (byte)0x41 // A
, (byte)0x1B, (byte)0x24, (byte)0x42 // ESC $ B // 半角英数字と日本語の境。
, (byte)0x24, (byte)0x22 // あ
, (byte)0x1B, (byte)0x28, (byte)0x42 // ESC ( B // 日本語と半角英数字の境。
, (byte)0x42 // B
};
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( source, "ISO-2022-JP" );
System.out.println( string );
// AあB
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード
// (上記の例では「ISO-2022-JP」)が、Javaではサポート
// されていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
}
}
import java.io.UnsupportedEncodingException;
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// 文字コード「ISO-2022-JP」(IANAに登録している名前も同じ)
// での「AあB」をStringクラスに渡します。
byte[] source = new byte[]
{ (byte)0x41 // A
, (byte)0x1B, (byte)0x24, (byte)0x42 // ESC $ B // 半角英数字と日本語の境。
, (byte)0x24, (byte)0x22 // あ
, (byte)0x1B, (byte)0x28, (byte)0x42 // ESC ( B // 日本語と半角英数字の境。
, (byte)0x42 // B
};
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( source, "ISO-2022-JP" );
System.out.println( string );
// AあB
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード
// (上記の例では「ISO-2022-JP」)が、Javaではサポート
// されていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
}
}
// Sample.java import java.io.UnsupportedEncodingException; // Sample.java public class Sample { public static void main( String[] args ) { try { // 文字コード「ISO-2022-JP」(IANAに登録している名前も同じ) // での「AあB」をStringクラスに渡します。 byte[] source = new byte[] { (byte)0x41 // A , (byte)0x1B, (byte)0x24, (byte)0x42 // ESC $ B // 半角英数字と日本語の境。 , (byte)0x24, (byte)0x22 // あ , (byte)0x1B, (byte)0x28, (byte)0x42 // ESC ( B // 日本語と半角英数字の境。 , (byte)0x42 // B }; // 文字コードの変換はStringクラスのコンストラクタで行います。 // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。 // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。 // そうするとUnicodeに変換されて格納されます。 String string = new String( source, "ISO-2022-JP" ); System.out.println( string ); // AあB } catch( UnsupportedEncodingException e ) { // StringクラスのコンストラクタがUnsupportedEncodingException例外を // 投げるので拾います。第2引数で渡された文字コード // (上記の例では「ISO-2022-JP」)が、Javaではサポート // されていない文字コードの場合にエラーとなります。 e.printStackTrace(); } } }