Javaの文字コードは基本的にUnicodeになる。
このページでは文字化けの原因となる文字コードとは?についての簡単な説明とJavaでの文字コードのTips的な話についてまとめてみた。参考にしていただければと思う。
目次
文字コードとは?
コンピュータ内部で文字はどのように扱われているかと言うと、文字ひとつひとつに数値が割り当てられている。この文字に対して割り当てられた数値のことを文字コードと呼んでいる。
文字コードには色々な業界規格がある。この業界規格に名前が付けられている。有名なものではシフト・ジス(Shift-JIS)とか、ユニコード(Unicode)などと呼ばれるものがある。Javaは、たくさんある規格の中でUnicodeを使っている。
Unicodeには、基本ラテン文字(英数字)に加えて、様々な言語に使われている文字が含まれている。Unicodeに含まれる言語のいくつかを選んで紹介しよう。言語ごとの文字の数に応じて文字コードの範囲が決まっている。このため、漢字の文字コード範囲は他の言語の文字に比べれば多い。
文字 |
文字コード範囲 |
例 |
基本ラテン文字 |
0000-007F |
ABC |
ギリシャ文字 |
0370-03FF |
αβγ |
ひらかな |
3040-309F |
あいう |
カタカナ |
30A0-30FF |
アイウ |
漢字 |
3190-319F |
亜伊宇 |
では、Unicodeの「A」の文字コードで表すと16進の41になる。また、「B」は10進の42になる。実際にプログラムで確かめてみよう。
ABを文字コードで表示する
1 2 3 4 5 6 7 8 |
public class CharacterCodeOfAB { public static void main(String[] args) { char characterA = 'A';//[1] char characterB = 'B';//[2] System.out.printf("[3] 文字コード:A = 0x%04x\n", (int)characterA); System.out.printf("[4] 文字コード:B = 0x%04x\n", (int)characterB); } } |
実行結果
1 2 |
[3] 文字コード:A = 0x0041 [4] 文字コード:B = 0x0042 |
プログラムの説明
それでは簡単にプログラムの解説をしておこう。
- [1] char型変数characterAに文字Aを代入する。
- [2] char型変数characterBに文字Bを代入する。
- [3] characterAの整数値を16進数で表示する。
- [4] characterBの整数値を16進数で表示する。
確かに、期待したとおりのコードが表示される。しかし、実はShift-JISも「A」は10進の65、「B」は66である。これでは、Unicodeなのか違いが分からない。文字コードの違う文字で試しみよう。以下の「あ」と「い」では、文字コードが違うことが分かるだろう。
文字 |
Unicode(16進) |
Shift JIS(16進) |
あ |
3042 |
82A0 |
い |
3044 |
82A2 |
実際に、プログラムで確認しておこう。
「あい」を文字コードで表示する
1 2 3 4 5 6 7 8 |
public class CharacterCodeOfAI { public static void main(String[] args) { char characterA = 'あ'; char characterB = 'い'; System.out.printf("文字コード:あ = 0x%04x\n", (int)characterA); System.out.printf("文字コード:い = 0x%04x\n", (int)characterB); } } |
実行結果
1 2 |
文字コード:あ = 0x3042 文字コード:い = 0x3044 |
確かに、Javaの文字がShift JISではなくて、Unicodeだということが分かる。
Unicodeを使って文字を設定する
プログラムのコードで文字を設定したい場合に、文字コードを使って文字を設定することができる。キーボードにない文字や読みが分からない文字でも、文字コードを調べれば文字を設定できる。
書き方の基本はこうだ。
\u0000 ← 0000の部分に16進のUnicodeの値を設定する
例えばギリシャ語の「β」を入力したい場合、Unicode文字コード表から文字コードを調べて、その値を文字として直接設定する。文字列の場合、文字列の中に直接Unicodeを書くことができる。つまり、文字列の中にUnicodeをその書き方で挿入することができる。具体的には、サンプルプログラムを見てほしい。
Unicodeを使って文字を設定するサンプルプログラム
このサンプルプログラムは、Unicodeを使ってギリシャ語の「β」を文字に、「θε」を文字列に設定している。
1 2 3 4 5 6 7 8 |
public class StringUsingUnicode { public static void main(String[] args) { char characterBeta = '\u03b2';//[1] String text = "ギリシャ文字 シータ:\u03c8 イプシロン:\u03b5";//[2] System.out.println("[3] 文字:03b2 = " + characterBeta); System.out.println("[4] 文字列:03c8 03b5 = " + text); } } |
実行結果
1 2 |
[3] 文字:03b2 = β [4] 文字列:03c8 03b5 = ギリシャ文字 シータ:ψ イプシロン:ε |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] char型変数characterBetaに文字コードで「β」を表現した文字を代入する。
- [2] String型変数textに文字コードでギリシャ文字「θ」と「ε」を表現した文字列を部分的に代入する。
- [3] 文字列characterBetaを表示する。
- [4] 文字列textを表示する。
まとめ
このページではJavaの文字コードについてまとめてみた。参考にしていただければと思う。