文字コードと数値の世界
〜ASCII・Unicodeを“数字”として扱い、理解するための実践入門〜
1. はじめに
「文字は文字、数字は数字」と思っていませんか?
プログラミングの世界では、文字も内部的にはすべて“数値”で扱われています。
この仕組みを理解することは、文字列操作、バイナリ処理、国際化対応、ハッシュ設計など多くの技術に直結します。
この記事では、代表的な文字コード「ASCII」「Unicode」を中心に、文字を数値として扱う基礎と応用をPythonコードとともに解説します。
2. ASCIIとは?― 最小単位の文字コード
✅ ASCII(アスキー)の基本
- 正式名:American Standard Code for Information Interchange
- 範囲:0〜127(7ビット)
- 特徴:
- 英数字と制御文字(改行・タブなど)に限定
- 半角英数が中心。国際化対応は不可
🔢 ASCIIコードの例
文字 | 10進数 | 16進数 | 2進数 |
---|---|---|---|
A | 65 | 0x41 | 0100 0001 |
a | 97 | 0x61 | 0110 0001 |
0 | 48 | 0x30 | 0011 0000 |
空白 | 32 | 0x20 | 0010 0000 |
🧪 Pythonで扱う例
# 文字 → 数値(Unicodeコードポイント) print(ord('A')) # 65 # 数値 → 文字 print(chr(65)) # 'A'
これだけで、文字を“数字”として自由に扱えるようになります!
3. Unicodeとは?― 世界中の文字をひとまとめに
✅ Unicodeの概要
🔤 Unicodeコードポイントの例
文字 | コードポイント(10進) | 16進 | 名称 |
---|---|---|---|
あ | 12354 | 0x3042 | ひらがな「あ」 |
中 | 20013 | 0x4E2D | 漢字「中」 |
😀 | 128512 | 0x1F600 | 顔文字(emoji) |
🧪 Pythonでの応用
# Unicode文字を数値に print(ord('中')) # 20013 print(hex(ord('中'))) # '0x4e2d' # 数値から文字に変換 print(chr(0x3042)) # 'あ'
4. 文字コードとバイト列
文字コードの数値(コードポイント)と実際に通信やファイル保存時に使われる“バイト列”は異なります。
たとえば:
# UTF-8でエンコード(バイト列に変換) print('A'.encode('utf-8')) # b'A' print('中'.encode('utf-8')) # b'\xe4\xb8\xad' # バイト列からデコード print(b'\xe4\xb8\xad'.decode('utf-8')) # '中'
ポイント - ASCII文字は1バイトで済む(互換性が高い) - 非ASCII文字は複数バイト(例:「中」はUTF-8で3バイト)
5. 実践的な応用シーン
✅ 1. 暗号やハッシュでの数値化
text = 'abc' hash_input = sum(ord(c) for c in text) # 97 + 98 + 99 = 294 print(hash_input)
✅ 2. ソート時の辞書順制御
print('A' < 'a') # True(65 < 97)
✅ 3. Base64/Hex変換やバイナリプロトコルの構築
text = 'Hello' encoded = text.encode('utf-8').hex() print(encoded) # 48656c6c6f
6. まとめ
- ASCII は基本の英数字コード(0〜127)
- Unicode は世界中の文字に対応(BMPから拡張面まで)
- 文字は
ord()
・chr()
で簡単に数値と相互変換できる - UTF-8やUTF-16はバイト列での表現で、コードポイントと異なる
文字を数値として扱う知識は、暗号処理、データ整形、バイナリ操作などに欠かせません。
“文字”を“データ”として見る視点を持つことで、エンジニアとしての理解が深まります。