UTF-8
日本語 | 単一文字コード変換形式8ビット |
英語 | Unicode Transformation Format-8 |
ふりがな | ゆーてぃーえふはち |
フリガナ | ユーティーエフハチ |
文字コードの一種。
あらゆる言語の文字を表現できる文字コード。
広義の「Unicode」だが、Javaでの標準文字コードであるUnicode(UCS-2)とは異なる。
1文字を1バイト数個によって表現する文字コード。
同じ「あらゆる言語の文字を表現できる文字コード」であるUnicode(UCS-2)は1文字を2バイトで表現するが、UTF-8では1文字にかけるバイト数が「1バイト以上」のため、文字によっては3バイトや4バイトも費やすことができ、Unicode(UCS-2)よりも余裕をもって「あらゆる文字」が表現できることになる。
また、ASCII(ISO-8859-1)に当たる文字は1バイトであり、全く同じ文字コードのため、半角英数字だけであればこれまでの通常のテキストと同じであり、汎用性が高いと言える。
こういったメリットにより、これからの汎用文字コードとして期待されている。
ただし、文字によってバイト数が異なってしまうため、プログラムでの処理が難しい。
たとえば"A"は0x41だが、"あ"は0xE38182であり、これらを実際に処理するのは難しいだろう。
文字列操作はUnicode(UCS-2)の方が断然楽のため、Stringクラスに格納して操作する方が楽だろう。
UTF-8のIANAでの登録名は、同じ"UTF-8"である。
そのため、StringクラスのコンストラクタやgetBytes()メソッドに渡す場合にも"UTF-8"を渡せばよい。
あらゆる言語の文字を表現できる文字コード。
広義の「Unicode」だが、Javaでの標準文字コードであるUnicode(UCS-2)とは異なる。
1文字を1バイト数個によって表現する文字コード。
同じ「あらゆる言語の文字を表現できる文字コード」であるUnicode(UCS-2)は1文字を2バイトで表現するが、UTF-8では1文字にかけるバイト数が「1バイト以上」のため、文字によっては3バイトや4バイトも費やすことができ、Unicode(UCS-2)よりも余裕をもって「あらゆる文字」が表現できることになる。
また、ASCII(ISO-8859-1)に当たる文字は1バイトであり、全く同じ文字コードのため、半角英数字だけであればこれまでの通常のテキストと同じであり、汎用性が高いと言える。
こういったメリットにより、これからの汎用文字コードとして期待されている。
ただし、文字によってバイト数が異なってしまうため、プログラムでの処理が難しい。
たとえば"A"は0x41だが、"あ"は0xE38182であり、これらを実際に処理するのは難しいだろう。
文字列操作はUnicode(UCS-2)の方が断然楽のため、Stringクラスに格納して操作する方が楽だろう。
UTF-8のIANAでの登録名は、同じ"UTF-8"である。
そのため、StringクラスのコンストラクタやgetBytes()メソッドに渡す場合にも"UTF-8"を渡せばよい。
参考サイト
// Sample.java
import java.io.UnsupportedEncodingException;
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// 文字コード「UTF-8」での「あいう」をStringクラスに渡します。
byte[] source = new byte[] { (byte)0xE3, (byte)0x81, (byte)0x82, (byte)0xE3, (byte)0x81, (byte)0x84, (byte)0xE3, (byte)0x81, (byte)0x86 };
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( source, "UTF-8" );
System.out.println( string );
// あいう
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード
// (上記の例では「UTF-8」)が、Javaではサポート
// されていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
}
}
import java.io.UnsupportedEncodingException;
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// 文字コード「UTF-8」での「あいう」をStringクラスに渡します。
byte[] source = new byte[] { (byte)0xE3, (byte)0x81, (byte)0x82, (byte)0xE3, (byte)0x81, (byte)0x84, (byte)0xE3, (byte)0x81, (byte)0x86 };
// 文字コードの変換はStringクラスのコンストラクタで行います。
// 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
// 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
// そうするとUnicodeに変換されて格納されます。
String string = new String( source, "UTF-8" );
System.out.println( string );
// あいう
}
catch( UnsupportedEncodingException e )
{
// StringクラスのコンストラクタがUnsupportedEncodingException例外を
// 投げるので拾います。第2引数で渡された文字コード
// (上記の例では「UTF-8」)が、Javaではサポート
// されていない文字コードの場合にエラーとなります。
e.printStackTrace();
}
}
}
// Sample.java import java.io.UnsupportedEncodingException; // Sample.java public class Sample { public static void main( String[] args ) { try { // 文字コード「UTF-8」での「あいう」をStringクラスに渡します。 byte[] source = new byte[] { (byte)0xE3, (byte)0x81, (byte)0x82, (byte)0xE3, (byte)0x81, (byte)0x84, (byte)0xE3, (byte)0x81, (byte)0x86 }; // 文字コードの変換はStringクラスのコンストラクタで行います。 // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。 // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。 // そうするとUnicodeに変換されて格納されます。 String string = new String( source, "UTF-8" ); System.out.println( string ); // あいう } catch( UnsupportedEncodingException e ) { // StringクラスのコンストラクタがUnsupportedEncodingException例外を // 投げるので拾います。第2引数で渡された文字コード // (上記の例では「UTF-8」)が、Javaではサポート // されていない文字コードの場合にエラーとなります。 e.printStackTrace(); } } }