0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

文字コードの文脈でよく見かける用語を整理

0
Posted at

この記事を記録しておこうと思った背景

文字コードあたりを調べたときによく出てくる用語、何回も調べてきた気がするが結局また調べるということを繰り返しており、この記事を見ればざっと頭の中が整理されるようにしたかったため

ざっくり時系列

時代 代表例 処理の流れ
昔(~1990年代) ASCII、Shift_JIS、EUC-JP 文字 → バイト列
今(2000年代~現在) Unicode + UTF-8(主流)、Unicode + UTF-16、Unicode + UTF-32 文字 → ID → バイト列

詳細な時系列

昔は各国が独自のルールで文字を直接0と1(バイト列)に変換し、OSやアプリがそのバイト列を保存していた

しかしこれだとAという国が保存したファイルをBという国が開いたとき、保存時と閲覧時でルールが異なるから文字化けするという問題が発生

これを解消するため、世界中で同じ文字を共通に扱うことになった。文字の管理(Unicode)と保存方法(UTF-8などの文字コード)を分離した。

Unicodeで「世界共通の文字ID」を管理し、文字コードでそのIDをバイト列に変換してOSやアプリがそのバイト列を保存

普段はエディタがそのバイト列を文字として解釈して表示するため、人間には「あ」などの文字として見える。バイト列そのものを確認したい場合は、バイナリエディタなどが基本的には16進数(例:E3 81 82)で表示する。

なぜ16進数が使われるのか

コンピュータはデータを0と1(2進数)で扱う。

例えばUTF-8の「あ」は、実際には次のような3バイトのデータとして保存される。

1バイト 2進数 10進数 16進数
1個目 11100011 227 E3
2個目 10000001 129 81
3個目 10000010 130 82

バイト列は2進数・10進数・16進数など、さまざまな表記方法で表すことができる。

しかし、

  • 2進数:桁数が多く読みにくい
  • 10進数:桁数は少ないが、どこまでが1バイトなのか直感的に分かりにくい
  • 16進数:**2桁でちょうど1バイト(8ビット)**を表せるため、バイトの区切りが分かりやすくコンパクト

そのため、バイト列を確認するツール(バイナリエディタやデバッガなど)では、16進数で表示するのが一般的である。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?