JavaA2Z

KAB-studio > プログラミング > JavaA2Z > Unicodeとは

Unicode

日本語 単一文字コード
英語 unicode
ふりがな ゆにこーど
フリガナ ユニコード

解説

Javaの標準文字コード
あらゆる国のあらゆる文字を表現することができる。
1文字が2バイト整数値で表現され、char変数で格納することができる。また文字列Stringクラスに格納することができる。
Javaプログラムにおいて文字列と言えば必ずUnicodeであり、char変数に格納する文字Stringクラスに格納する文字列は、必ずUnicodeである必要がある。もしファイルやインターネット経由で別の文字コード文字列を取得した場合には、その文字列byte配列として受け取り、それをUnicodeに変換してStringクラスに格納することになる。
 
Unicodeは2バイト符号なし整数値で表現されるため、全部で65536文字しか表現できない。
その関係もあり、似た文字をひとつの文字で表現していたり、他の文字コードとの変換時に整合性が取れない等の問題もある。
しかし、他の文字コードと異なり、必ず1文字char変数1文字に格納されるため、Shift JISのように複数の文字で1文字とみなす必要がないといったメリットもある。
現在のUnicodeは、他の文字コードに比べプログラムでの処理がしやすいという点で比較的ベターではあるが、いくつかの問題によりベストとは言えない面もある。しかし、Javaの標準文字コードである以上避けようがないため、上手に付き合う必要があるだろう。
 
以上の「標準文字コード」というのは、実中に変数に格納される文字コードの話である。
よって、ソースファイル文字コードとは全く関係ないことに注意。ソースファイル文字コードコンパイラが対応している文字コードであればどの文字コードで記述しても構わず、コンパイル時にその文字コードを指定すればよい。
ソースファイル文字コードで表現できない文字だが、Unicodeでは表現できる文字文字リテラル及び文字列リテラルで使用したい場合には、エスケープシーケンス\uXXXX」という形式で「XXXX」にその文字に該当する16進整数値を記述すればよい。
ただし、出力時の環境、特にフォントがその文字を持っていなければ当然表示はできないため注意が必要。
 
「Unicode」という名称にはJavaで使用されているものの他に「UTF-8」「UTF-16」といったものも存在するが、これらは別の文字コードであり、体系的には全く関連性はない。
「Unicode」とは「様々な言語の文字を表現できる文字コード」という意味で一般的に使用されている用語であり、特定の文字コードを指さない場合があり、その場合には、Unicodeは広い意味で使用され、「UTF-8」等も含むことになる。
Javaで使用するUnicodeは、正確には「UCS-2」と呼ぶ。IANAで登録されている名称は"ISO-10646-UCS-2"である。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.io.UnsupportedEncodingException;

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // char型変数を作り、文字リテラル「あ」を格納します。
        char ch = 'あ';
        System.out.println( ch );
        // あ

        // この変数には、Unicodeで「あ」に該当する整数値0x3042が
        // 格納されています。
        System.out.println( Integer.toHexString( ch ) );
        // 3042

        // ソースファイルの文字コードと、実行中に変数に格納される
        // 文字コードは無関係です。Eclipseやエディタで入力できない
        // 文字ても、Unicodeのコードが分かっていれば
        // エスケープシーケンス「\u0000」(0000は文字を表すの16進数)
        // を使用して表現できます。
        // たとえば「草なぎ剛」の「なぎ」は以下のようにして
        // 出力できます。
        System.out.println( '\u5F45' );
        // ただし、出力時のフォントがこの文字をサポートしていなければ
        // 出力できませんが……。

        try
        {
            // 文字コード「UCS-2」(Unicodeの正式名称)での
            // 「あいう」をStringクラスに渡します。
            byte[] source = new byte[] { (byte)0x30, (byte)0x42, (byte)0x30, (byte)0x44, (byte)0x30, (byte)0x46 };
            // 文字コードの変換はStringクラスのコンストラクタで行います。
            // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
            // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
            // そうするとUnicodeに変換されて格納されます。
            String string = new String( source, "ISO-10646-UCS-2" );
            System.out.println( string );
            // あいう
        }
        catch( UnsupportedEncodingException e )
        {
            // StringクラスのコンストラクタがUnsupportedEncodingException例外を
            // 投げるので拾います。第2引数で渡された文字コード
            // (上記の例では「ISO-10646-UCS-2」)が、Javaではサポート
            // されていない文字コードの場合にエラーとなります。
            e.printStackTrace();
        }
    }
}
// Sample.java
import java.io.UnsupportedEncodingException;

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // char型変数を作り、文字リテラル「あ」を格納します。
        char ch = 'あ';
        System.out.println( ch );
        // あ

        // この変数には、Unicodeで「あ」に該当する整数値0x3042が
        // 格納されています。
        System.out.println( Integer.toHexString( ch ) );
        // 3042

        // ソースファイルの文字コードと、実行中に変数に格納される
        // 文字コードは無関係です。Eclipseやエディタで入力できない
        // 文字ても、Unicodeのコードが分かっていれば
        // エスケープシーケンス「\u0000」(0000は文字を表すの16進数)
        // を使用して表現できます。
        // たとえば「草なぎ剛」の「なぎ」は以下のようにして
        // 出力できます。
        System.out.println( '\u5F45' );
        // ただし、出力時のフォントがこの文字をサポートしていなければ
        // 出力できませんが……。

        try
        {
            // 文字コード「UCS-2」(Unicodeの正式名称)での
            // 「あいう」をStringクラスに渡します。
            byte[] source = new byte[] { (byte)0x30, (byte)0x42, (byte)0x30, (byte)0x44, (byte)0x30, (byte)0x46 };
            // 文字コードの変換はStringクラスのコンストラクタで行います。
            // 第1引数には他文字コードの文字列が格納されたbyte型配列を渡します。
            // 第2引数には、そのbyte型配列に格納されている文字列の文字コードを渡します。
            // そうするとUnicodeに変換されて格納されます。
            String string = new String( source, "ISO-10646-UCS-2" );
            System.out.println( string );
            // あいう
        }
        catch( UnsupportedEncodingException e )
        {
            // StringクラスのコンストラクタがUnsupportedEncodingException例外を
            // 投げるので拾います。第2引数で渡された文字コード
            // (上記の例では「ISO-10646-UCS-2」)が、Javaではサポート
            // されていない文字コードの場合にエラーとなります。
            e.printStackTrace();
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/08/16
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。