Page 1
文字コードへの道
The Road to Character Encodings
pixiv Inc.
USAMI Kenta
2024-01-28 #retro_games_any
レトロゲームから得た学びの発表 #01
公開日:
by USAMI Kenta@tadsan
文字コードへの道
The Road to Character Encodings
pixiv Inc.
USAMI Kenta
2024-01-28 #retro_games_any
レトロゲームから得た学びの発表 #01
お前誰よ
今回の発表の背景
(phpcon2024)
さて
コンピュータ内の データのイメージ
非常に大雑把なイメージ
コンピュータのメモリ
= データを格納する箱が並んでいる
0 1 2 3 4 5 6 7 8 9 … 1,073,741,824
(1GBメモリ)
データを整列して見る
1列で表示するとわかりにくいので 16個単位で折り返すことがよくある
0 1 2 3 4 5 6 7 8 9 A B C D E F
1x 2x 3x 4x
列 = 下1桁
5x 6x 7x 8x
非常に大雑把なイメージ
四角い箱
文字列 Abc12
" "
= メモリ
A b c 1 2
ところでコンピュータって
0と1の世界 なのでは…?
0と1の世界
0と1の世界
= binary
(2進法)
0と1の世界
= binary
(2進法)
= bit
(2値データ)
粒度が細かすぎる
粒度が細かすぎる → まとめて扱おう
粒度が細かすぎる → まとめて扱おう
= bytes
(バイト)
非常に大雑把なイメージ
(再掲)
四角い箱
箱に入るのは
文字列 Abc12
" "
= メモリ
0〜256の数字だけ
A b c 1 2
数字に置き換えて箱に入れる
データをまとめて扱う
8
(=256)
日本語文字列をメモリに入れよう
× 文字列
"あいうえお"
あ い う え お
数字に置き換える方法を…
文字をデータに
してみよう
英語の文字をデータにしてみよう
2進数 10進数 文字
00000 0 A
00010 2 C
5bit = 2 =32(種類)で表現できる
5
00011 3 D
00100 4 E
00101 5 F
00110 6 G
00111 7 H
… …
11001 25 Z
ひらがなをデータにしてみよう
2進数 10進数 文字
000000 0 あ
6
000001 1 い
000010 2 う
000011 3 え
000100 4 お
… … …
101100 44 わ
101101 45 を
101110 46 ん
ひらがなをデータにしてみよう
2進数 10進数 文字
000000 0 あ
6
000001 1 い
000011 3 え
000100 4 お
… … …
101100 44 わ
101101 45 を
101110 46 ん
ひらがなをデータにしてみよう
2進数 10進数 文字
000000 0 あ
6
000001 1 い
000011 3 え
000100 4 お
… … …
101100 44 わ
101101 45 を
101110 46 ん
ひらがなをデータにしてみよう
2進数 10進数 文字
000000 0 あ
6
000001 1 い
000011 3 え
000100 4 お
… … …
101100 44 わ
101101 45 を
101110 46 ん
16進数表
そういうことを考えると 文字コードを設計できる
現在のコンピュータは
どうやって文字を扱うか
ASCII (アスキー)
Unicode
16
思われていたらしい
UTF-8
制御文字
21世紀の環境で Unicode以外を
採用する動機は激減
かつてはそうでは
なかった
(と伝え聞く)
歴史的な事例
有名な逸話
『しんでしまうとは なにごとだ!』 堀井雄二(編集・執筆)
株式会社スクウェア・エニックス
デジタル版 Ver.1.00 2018年9月1日(Kindle)
p11より引用
ドラゴンクエスト
(ファミリーコンピュータ)
ドラゴンクエスト (FC) 解析資料 - 文字コード より引用 (2025年1月28日閲覧)
ドラゴンクエスト (FC) 解析資料 - 文字コード より引用 (2025年1月28日閲覧)
第三章 自分だけのオリジナルマップを作ろう (kuwatan.jp) より引用
(2025年1月28日閲覧)
ドラゴンクエストV
(スーパーファミコン)
ポケットモンスター
(ゲームボーイ)
文字コード対応表 - pokemonbug @ ウィキ - atwiki より引用 (2024年12月22日閲覧)
社長が訊く『ポケットモンスター ハートゴールド・ソウルシルバー』 より引用 (2025年1月28日閲覧)
今や文字コードを独自設計し たり、フォントをビット単位 で押し込めるような時代では
なくなった
サイズ削減のためバンドルするフォント
ファイルの文字種を削ったり、
独自の文字を表示するためにUnicodeの
私用領域を使うことはあると思う
