文字コード
日本語 | 文字表 |
英語 | character code |
ふりがな | もじこーど |
フリガナ | モジコード |
文字と整数値の「変換表」。
文字は、実行中の変数内では整数として格納されている。その「どの整数値がどの文字に該当するか」が書かれた表が「文字コード」である。
「文字エンコーディング」「文字セット」と呼ばれることもある。ただし、微妙に意味が異なるため、そのまま同じ意味で使用するには注意が必要。
「文字コード」という用語は古くから買われており、比較的広い意味で使われるため、曖昧な部分が多い。そのため、厳密な定義では使用が避けられる傾向にあり、Javaでは実際のところ、あまり使用されない。ただし、一般的にはよく使用されている用語である。
Javaでの標準文字コードは「Unicode」という文字コードであり、たとえばこの文字コードでは、「あ」は「0x3042」という整数値である。このふたつの変換表が「Unicode」という文字コードというわけである。
文字コードには様々な種類があり、日本語の文字コードも複数存在する。しかも、それらはOSや使用方法によって異なる。たとえばWindowsでは「シフトJIS」、UNIX系の多くでは「EUC」が使用される。またインターネットでは「UTF-8」もよく使用される。
Javaの標準文字コードはUnicodeのため、これら、他の文字コードをStringクラスに格納する場合には変換する必要がある。
文字列をbyte型の配列として格納し、これをStringクラスのコンストラクタの第1引数に渡し、第2引数には元の文字列の文字コードを渡すことで変換することができる。
また、Stringクラスに格納された文字列をUnicode以外の文字コードに変換する場合にはgetBytes()メソッドを使用する。
ただし、ストリームのクラスやメソッドの中には自動的に文字コードを変換してくれるものもある。またWebブラウザとの入出力時にも、文字コードを指定すれば自動的に変換される。
文字コードの変換は、基本的にJavaがサポートしているため、独自に変換するプログラムを組む必要はない。
文字コードの「正式名称」はIANAによって決められており、「CHARACTER SETS」というページに記述されている。たとえば「シフトJIS」であれば"Shift_JIS"という名称となる。
たとえばStringクラスの、コンストラクタやgetBytes()メソッドに渡す「文字コードの名称」は、このページから「正式名称」を調べ、その正式名称を指定すればよい。
「文字コード」という単語は「文字の整数値での値」を指すこともある。
たとえば、「'あ'という文字のUnicodeでの文字コードは0x3042である」といった使われ方をすることもある。
文字は、実行中の変数内では整数として格納されている。その「どの整数値がどの文字に該当するか」が書かれた表が「文字コード」である。
「文字エンコーディング」「文字セット」と呼ばれることもある。ただし、微妙に意味が異なるため、そのまま同じ意味で使用するには注意が必要。
「文字コード」という用語は古くから買われており、比較的広い意味で使われるため、曖昧な部分が多い。そのため、厳密な定義では使用が避けられる傾向にあり、Javaでは実際のところ、あまり使用されない。ただし、一般的にはよく使用されている用語である。
Javaでの標準文字コードは「Unicode」という文字コードであり、たとえばこの文字コードでは、「あ」は「0x3042」という整数値である。このふたつの変換表が「Unicode」という文字コードというわけである。
文字コードには様々な種類があり、日本語の文字コードも複数存在する。しかも、それらはOSや使用方法によって異なる。たとえばWindowsでは「シフトJIS」、UNIX系の多くでは「EUC」が使用される。またインターネットでは「UTF-8」もよく使用される。
Javaの標準文字コードはUnicodeのため、これら、他の文字コードをStringクラスに格納する場合には変換する必要がある。
文字列をbyte型の配列として格納し、これをStringクラスのコンストラクタの第1引数に渡し、第2引数には元の文字列の文字コードを渡すことで変換することができる。
また、Stringクラスに格納された文字列をUnicode以外の文字コードに変換する場合にはgetBytes()メソッドを使用する。
ただし、ストリームのクラスやメソッドの中には自動的に文字コードを変換してくれるものもある。またWebブラウザとの入出力時にも、文字コードを指定すれば自動的に変換される。
文字コードの変換は、基本的にJavaがサポートしているため、独自に変換するプログラムを組む必要はない。
文字コードの「正式名称」はIANAによって決められており、「CHARACTER SETS」というページに記述されている。たとえば「シフトJIS」であれば"Shift_JIS"という名称となる。
たとえばStringクラスの、コンストラクタやgetBytes()メソッドに渡す「文字コードの名称」は、このページから「正式名称」を調べ、その正式名称を指定すればよい。
「文字コード」という単語は「文字の整数値での値」を指すこともある。
たとえば、「'あ'という文字のUnicodeでの文字コードは0x3042である」といった使われ方をすることもある。
参考サイト
// Sample.java
import java.io.UnsupportedEncodingException;
public class Sample
{
public static void main( String[] args )
{
// char型変数を作り、文字リテラル「あ」を格納します。
char ch = 'あ';
System.out.println( ch );
// あ
// 内部的には、文字は2バイトサイズの符号なし整数値です。
// 先ほどの文字を16進数で表示してみます。
System.out.println( Integer.toHexString( ch ) );
// 3042
try
{
// この値は、文字コード「Unicode」での、「あ」の値です。
// UnicodeはJavaの標準文字コードで、Stringクラスで
// 格納される文字列の文字コードは全てUnicodeです。
// 他の文字コードからUnicodeに変換する場合、その文字列を
// byte型の配列として持ち、文字コードを指定してUnicodeに変換します。
// 例として、文字コード「シフトJIS」での「あいう」を変換します。
byte[] bytes = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 };
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( bytes, "Shift_JIS" );
System.out.println( string );
// あいう
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード(上記の例では「Shift_JIS」)
// が、Javaではサポートされていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
try
{
// Unicodeで格納されている文字列を、他の文字コードで
// 取得する場合にはStringクラスのgetBytes()メソッドを
// 使用します。
byte[] bytes = "えお".getBytes( "Shift_JIS" );
System.out.println( Integer.toHexString( bytes[0] ) );
System.out.println( Integer.toHexString( bytes[1] ) );
System.out.println( Integer.toHexString( bytes[2] ) );
System.out.println( Integer.toHexString( bytes[3] ) );
// ffffff82
// ffffffa6
// ffffff82
// ffffffa8
}
catch( UnsupportedEncodingException e )
{
// getBytes()メソッドも、第1引数で渡された文字コードが
// Javaでサポートされていない文字コードの場合には
// UnsupportedEncodingException例外が投げられます。
e.printStackTrace();
}
// Unicode以外の文字コードに変換する際に「Stringクラスで受け取る」
// ことができないという点に注意してください。
// Javaでは、Stringクラスに格納されている文字列の文字コードは
// Unicodeと決まっています。それ以外はあり得ません。
// ……あり得ないけど、ブラウザ経由で取得するときとかは
// そういうことも……。
// そういう場合には、次のように1文字ずつ16進数表記で出力してみましょう。
// いわゆる「文字列の16進ダンプ」と呼ばれるものです。
String string = "あいう";
char[] chars = string.toCharArray();
for( int iF1 = 0; iF1 < chars.length; ++iF1 )
{
System.out.println( Integer.toHexString( chars[iF1] ) );
}
// 3042
// 3044
// 3046
try
{
// また、Stringクラスの中に別の文字コードが入っている場合に
// それをbyte型の配列と取得する場合には、getBytes()メソッドの
// 引数に"ISO-8859-1"を渡して取得します。
// 文字コード「シフト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 = 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 )
{
// char型変数を作り、文字リテラル「あ」を格納します。
char ch = 'あ';
System.out.println( ch );
// あ
// 内部的には、文字は2バイトサイズの符号なし整数値です。
// 先ほどの文字を16進数で表示してみます。
System.out.println( Integer.toHexString( ch ) );
// 3042
try
{
// この値は、文字コード「Unicode」での、「あ」の値です。
// UnicodeはJavaの標準文字コードで、Stringクラスで
// 格納される文字列の文字コードは全てUnicodeです。
// 他の文字コードからUnicodeに変換する場合、その文字列を
// byte型の配列として持ち、文字コードを指定してUnicodeに変換します。
// 例として、文字コード「シフトJIS」での「あいう」を変換します。
byte[] bytes = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 };
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( bytes, "Shift_JIS" );
System.out.println( string );
// あいう
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード(上記の例では「Shift_JIS」)
// が、Javaではサポートされていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
try
{
// Unicodeで格納されている文字列を、他の文字コードで
// 取得する場合にはStringクラスのgetBytes()メソッドを
// 使用します。
byte[] bytes = "えお".getBytes( "Shift_JIS" );
System.out.println( Integer.toHexString( bytes[0] ) );
System.out.println( Integer.toHexString( bytes[1] ) );
System.out.println( Integer.toHexString( bytes[2] ) );
System.out.println( Integer.toHexString( bytes[3] ) );
// ffffff82
// ffffffa6
// ffffff82
// ffffffa8
}
catch( UnsupportedEncodingException e )
{
// getBytes()メソッドも、第1引数で渡された文字コードが
// Javaでサポートされていない文字コードの場合には
// UnsupportedEncodingException例外が投げられます。
e.printStackTrace();
}
// Unicode以外の文字コードに変換する際に「Stringクラスで受け取る」
// ことができないという点に注意してください。
// Javaでは、Stringクラスに格納されている文字列の文字コードは
// Unicodeと決まっています。それ以外はあり得ません。
// ……あり得ないけど、ブラウザ経由で取得するときとかは
// そういうことも……。
// そういう場合には、次のように1文字ずつ16進数表記で出力してみましょう。
// いわゆる「文字列の16進ダンプ」と呼ばれるものです。
String string = "あいう";
char[] chars = string.toCharArray();
for( int iF1 = 0; iF1 < chars.length; ++iF1 )
{
System.out.println( Integer.toHexString( chars[iF1] ) );
}
// 3042
// 3044
// 3046
try
{
// また、Stringクラスの中に別の文字コードが入っている場合に
// それをbyte型の配列と取得する場合には、getBytes()メソッドの
// 引数に"ISO-8859-1"を渡して取得します。
// 文字コード「シフト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 = 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 ) { // char型変数を作り、文字リテラル「あ」を格納します。 char ch = 'あ'; System.out.println( ch ); // あ // 内部的には、文字は2バイトサイズの符号なし整数値です。 // 先ほどの文字を16進数で表示してみます。 System.out.println( Integer.toHexString( ch ) ); // 3042 try { // この値は、文字コード「Unicode」での、「あ」の値です。 // UnicodeはJavaの標準文字コードで、Stringクラスで // 格納される文字列の文字コードは全てUnicodeです。 // 他の文字コードからUnicodeに変換する場合、その文字列を // byte型の配列として持ち、文字コードを指定してUnicodeに変換します。 // 例として、文字コード「シフトJIS」での「あいう」を変換します。 byte[] bytes = new byte[] { (byte)0x82, (byte)0xA0, (byte)0x82, (byte)0xA2, (byte)0x82, (byte)0xA4 }; // 文字コードの変換はStringクラスのコンストラクタで行います。 // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。 // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。 // そうするとUnicodeに変換されて格納されます。 String string = new String( bytes, "Shift_JIS" ); System.out.println( string ); // あいう } catch( UnsupportedEncodingException e ) { // StringクラスのコンストラクタがUnsupportedEncodingException例外を // 投げるので拾います。第2引数で渡された文字コード(上記の例では「Shift_JIS」) // が、Javaではサポートされていない文字コードの場合にエラーとなります。 e.printStackTrace(); } try { // Unicodeで格納されている文字列を、他の文字コードで // 取得する場合にはStringクラスのgetBytes()メソッドを // 使用します。 byte[] bytes = "えお".getBytes( "Shift_JIS" ); System.out.println( Integer.toHexString( bytes[0] ) ); System.out.println( Integer.toHexString( bytes[1] ) ); System.out.println( Integer.toHexString( bytes[2] ) ); System.out.println( Integer.toHexString( bytes[3] ) ); // ffffff82 // ffffffa6 // ffffff82 // ffffffa8 } catch( UnsupportedEncodingException e ) { // getBytes()メソッドも、第1引数で渡された文字コードが // Javaでサポートされていない文字コードの場合には // UnsupportedEncodingException例外が投げられます。 e.printStackTrace(); } // Unicode以外の文字コードに変換する際に「Stringクラスで受け取る」 // ことができないという点に注意してください。 // Javaでは、Stringクラスに格納されている文字列の文字コードは // Unicodeと決まっています。それ以外はあり得ません。 // ……あり得ないけど、ブラウザ経由で取得するときとかは // そういうことも……。 // そういう場合には、次のように1文字ずつ16進数表記で出力してみましょう。 // いわゆる「文字列の16進ダンプ」と呼ばれるものです。 String string = "あいう"; char[] chars = string.toCharArray(); for( int iF1 = 0; iF1 < chars.length; ++iF1 ) { System.out.println( Integer.toHexString( chars[iF1] ) ); } // 3042 // 3044 // 3046 try { // また、Stringクラスの中に別の文字コードが入っている場合に // それをbyte型の配列と取得する場合には、getBytes()メソッドの // 引数に"ISO-8859-1"を渡して取得します。 // 文字コード「シフト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 = 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(); } } }
「みだし」に含まれているページ
「解説」に含まれているページ
- '
- <%@ page contentType
- <%@ page pageEncoding
- \
- \"
- \'
- \\
- \n
- \r
- \t
- \u
- ASCII
- byte
- C++言語
- char
- Content-Type
- CP932
- EUC
- FileReader
- FileWriter
- getBytes
- HEAD
- HTML
- HttpServletRequest
- HttpServletResponse
- IANA
- InputStreamReader
- ISO
- ISO-2022-JP
- ISO-8859-1
- JIS
- MIME
- MS932
- OutputStreamWriter
- Shift_JIS
- UCS-2
- Unicode
- URLEncoder
- US-ASCII
- UTF-8
- XML
- 〓
- エンコード
- コード
- シフトJIS
- スペース
- ソースファイル
- タブ文字
- テキストファイル
- バイナリーファイル
- ファイル
- フォント
- プロトコル
- リクエストパラメーター
- 丸数字
- 全角
- 全角スペース
- 半角
- 半角カタカナ
- 大文字
- 実体参照
- 小文字
- 改行文字
- 文字
- 文字エンコーディング
- 文字コード
- 文字セット
- 文字化け
- 検索
「サンプルプログラムとか」に含まれているページ
- '
- <%! %>
- <%-- --%>
- <%= %>
- <%@ %>
- <%@ page
- <%@ page contentType
- <%@ page errorPage
- <%@ page import
- <%@ page isErrorPage
- <%@ page pageEncoding
- <%@ taglib
- <jsp:useBean>
- \
- \u
- ASCII
- Content-Type
- Cookie
- CP932
- DOM
- doPost
- DTD
- EUC
- EUC-JP
- FileInputStream
- FileWriter
- GET
- getBytes
- HEAD
- HTTP
- HttpServletRequest
- HttpURLConnection
- IANA
- InputStreamReader
- IPアドレス
- ISO-10646-UCS-2
- ISO-2022-JP
- ISO-8859-1
- Jasper
- JasperException
- java.net.URL
- JavaBeans
- JSP
- JspWriter
- JSPコメント
- JSPディレクティブ
- JSP宣言
- JSP式
- JSP指示子
- JSP暗黙オブジェクト
- JSP暗黙オブジェクト「application」
- JSP暗黙オブジェクト「config」
- JSP暗黙オブジェクト「exception」
- JSP暗黙オブジェクト「out」
- JSP暗黙オブジェクト「pageContext」
- JSP暗黙オブジェクト「request」
- JSP暗黙オブジェクト「response」
- JSP暗黙オブジェクト「session」
- JSTL
- libディレクトリ
- LineNumberInputStream
- MS932
- Node
- OutputStreamWriter
- PageContext
- POST
- RequestDispatcher
- ServletContext
- Shift_JIS
- StringBufferInputStream
- substring
- UCS-2
- Unicode
- URI
- URL
- URLDecoder
- URLEncoder
- US-ASCII
- UTF-8
- Webアプリケーション
- Windows-31J
- Xerces
- XML
- 「-」
- 「~」
- アドレス
- エイリアス
- エンコーディング
- エンコード
- カスタムタグライブラリ
- クッキー
- クロスサイトスクリプティング
- コンパイル
- サニタイジング
- シフトJIS
- スクリプトレット
- ステートレス
- セッションスコープ
- タグライブラリ
- タグリブ
- ダンプ
- テキストファイル
- デコード
- ドメイン名
- バイナリーファイル
- ホスト
- ポート番号
- リクエスト
- リクエストスコープ
- リクエストパラメーター
- リクエストヘッダー
- レスポンス
- レスポンスヘッダー
- 丸数字
- 入力フォーム
- 全角
- 半角
- 半角カタカナ
- 改行文字
- 文字
- 文字コード
- 文字セット
- 文字出力ストリーム
- 文字化け