回答編集履歴
1
文字コードと文字コード体系を分けるよう修正
test
CHANGED
@@ -2,9 +2,23 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
「文字コード」か「文字コード体系」かで変わりますが、
|
6
6
|
|
7
|
-
|
7
|
+
文字コード体系との比較なら同じものですよ。
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
もっと正確に言えば[文字コード体系](https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89)の規格は沢山あり、ユニコードは文字コードの実装の一つです。
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
[ASCII](https://ja.wikipedia.org/wiki/ASCII), [ISO-2022-JP](https://ja.wikipedia.org/wiki/ISO-2022-JP), [EUC-JP](https://ja.wikipedia.org/wiki/EUC-JP), [Shift_JIS](https://ja.wikipedia.org/wiki/Shift_JIS)...とまぁ沢山あります。
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
[ユニコード(Unicode)](https://ja.wikipedia.org/wiki/Unicode)は全世界で一つの「文字コード体系」で全ての文字を書き表すというプロジェクトを指します。
|
20
|
+
|
21
|
+
プロジェクトの結果として作られた文字コード体系はUTF-7, UTF-8, UTF-16, UTF-32などがあります。
|
8
22
|
|
9
23
|
|
10
24
|
|
@@ -12,69 +26,31 @@
|
|
12
26
|
|
13
27
|
|
14
28
|
|
15
|
-
|
29
|
+
そのchar型に代入した12345という数値は、内部的に2進数に変換されます。
|
16
30
|
|
31
|
+
ですので結局は`System.out.println('\u3042');`と同じことを2行に分けているだけです。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
ユニコード以前に全ての文字コードは16進数が基準です。
|
36
|
+
|
17
|
-
コンピュータの世界には0か1かしかありません。
|
37
|
+
元々コンピュータの世界には0か1かしかありません。
|
18
38
|
|
19
39
|
なのでこの0か1かを大量に使う事で、様々なものを表現するという事を行いました。
|
20
40
|
|
21
41
|
|
22
42
|
|
23
|
-
0か1かの2値を1bitとして考え、それを8文字繋げて1byteとしました。
|
24
|
-
|
25
|
-
計算は2進数で行います。1byteは00000000(0) - 11111111(255)を表す塊です。
|
26
|
-
|
27
|
-
|
43
|
+
詳しくは下記のサイトを見て下さい。
|
28
44
|
|
29
45
|
|
30
46
|
|
31
|
-
コンピュータが発明されたのは英語圏だったので、最初はアルファベットだけで十分でした。
|
32
|
-
|
33
|
-
|
47
|
+
参考サイト: [【5分で覚えるIT基礎の基礎】コンピュータの仕組み---第2回 2進数の世界](http://tech.nikkeibp.co.jp/it/members/ITPro/ITBASIC/20020515/1/)
|
34
|
-
|
35
|
-
今日でも多くの文字コードが採用している基準の考え方となっています。
|
36
48
|
|
37
49
|
|
38
50
|
|
39
|
-
|
51
|
+
詳細は割愛しますが、
|
40
52
|
|
41
|
-
|
53
|
+
1バイトで表現出来る数値の番地(表)に1つずつ文字を当てはめて出来たものが文字コード体系です。
|
42
|
-
|
43
|
-
そこで2byteを1まとめにする事を考え付きます。
|
44
|
-
|
45
|
-
256通りの表現が出来る2byteをくっつけることで、256*256=65536字を表現することが出来る様になりました。
|
46
|
-
|
47
|
-
(実際には65536字では足りなかったので、今日ではユニコードは多少下火になっていますが、全世界の殆どの文字列を叩き込めたのでなかなかいい感じです)
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
> 16進数に関してもうちょっと深掘り
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
数学で習ったかもしれませんが、2進数は8進数や16進数と非常に相性が良いのです。
|
56
|
-
|
57
|
-
2進数で1111(15)は16進数のF(15)と同じものです。
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
1010101010…の羅列ではプログラマにとっては読みづらくて敵わないので
|
62
|
-
|
63
|
-
2進数4桁を16進数1桁として取り扱うようになりました。
|
64
|
-
|
65
|
-
これが16進数の由来です。
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
パソコンはアプリ間、ネットワーク間の通信では0か1かのビットをまとめたビット列を送信しあって通信を行います。
|
70
|
-
|
71
|
-
0か1かのビット列なんて判別付くのかよ…という訳で、様々な規格があり、規格に沿った通信を行う必要があります。
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
文字コードとはビット列を人間が読む文字に変換したいという試みや、
|
76
|
-
|
77
|
-
ルール決めを指すものですので、文字コードだから16進数というわけじゃないんです。
|
78
54
|
|
79
55
|
|
80
56
|
|
@@ -84,13 +60,13 @@
|
|
84
60
|
|
85
61
|
いいえ違います。
|
86
62
|
|
87
|
-
|
63
|
+
質問文のコードには出てきていませんが、何かしらの文字モード体系で行きましょうという取り決めがなされています。
|
64
|
+
|
65
|
+
[Javaが取り扱う文字コード体系](http://d.hatena.ne.jp/cero-t/20110621/1308667569)はUTF-16のようですね。
|
88
66
|
|
89
67
|
|
90
68
|
|
91
|
-
|
69
|
+
アルファベットや数値、日本語問わず出力される全ての文字が文字コード体系の表により変換されて表示されます。
|
92
|
-
|
93
|
-
ユニコードは全世界統一を目指して作られた大きな野望を秘めた文字コードの一つです。
|
94
70
|
|
95
71
|
|
96
72
|
|
@@ -98,14 +74,24 @@
|
|
98
74
|
|
99
75
|
|
100
76
|
|
101
|
-
|
77
|
+
ありません。
|
102
78
|
|
103
|
-
|
79
|
+
貴方は12345という数値を使って「あ」を出力するシステムを構築するエンジニアになりたいのですか?
|
80
|
+
|
81
|
+
そんなニッチな仕組み何処で使うねん!
|
104
82
|
|
105
83
|
|
106
84
|
|
107
|
-
|
85
|
+
ただ、完全に無いという訳ではありません。
|
108
86
|
|
109
|
-
|
87
|
+
文字コード体系を作るエンジニア、文字コード体系から各種OSやプログラミング言語用のライブラリを作るエンジニアが存在するからです。
|
110
88
|
|
111
|
-
|
89
|
+
そういった人間の場合、ある程度の文字ならどの番地にあるかくらいは知っておかないと話になりません。
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
教養として知っておくと得なケースがありますので、覚えておく事に損はありません。
|
94
|
+
|
95
|
+
しかし、有名な文字コード体系というのは、基本的にはどのパソコンやソフトにもライブラリという形で既に提供されています。
|
96
|
+
|
97
|
+
普段エンジニアが12345をあに変換したいというケースはまずないと思います。
|