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?

エンコード・デコード

Posted at

はじめに

"エンコード" や "デコード"、"文字エンコーディング" といったワードを頻繁に見るようになってきたため、ここで目的や内容をまとめていきます。
これらを理解するための前提として、コンピュータのデータ処理の特性について知る必要があります。

バイナリ

コンピュータは「0」と「1」のバイナリデータしか理解することができません。
バイナリとは、「0」と「1」の2進数で表現されるデータのことです。
コンピュータは、電気信号の「オン(1)」と「オフ(0)」で情報を処理するため、すべてのデータを「0」と「1」の組み合わせ(バイナリデータ)として扱います。

人間と異なる言語を扱っているため、バイナリデータをエンコード・デコードによって他の形式にデータを変換することで、人間とコンピュータお互いが理解できる形でコミュニケーションをとることができるようになります。

※バイナリデータは、バイト列で表現され、人間が直接読むことはできません。

●バイナリデータの特徴

① 最小単位はビット(bit)

 1ビットは「0」または「1」の値を取ります。

② 8ビット = 1バイト(byte)

 1バイトは8ビットで構成され、256通り(2^8)の値を表現できます。

●メリット

① データの効率性

バイナリデータは、テキストデータに比べて効率的に保存・伝送できます。

(例)画像や音声をテキスト形式で保存すると、データサイズが非常に大きくなりますが、バイナリ形式で保存するとコンパクトになります。

② セキュリティ

バイナリデータは、そのままでは人間が読みにくいため、機密データの保護に役立ちます。

(例)暗号化されたデータは、バイナリ形式で保存されます。

③ データの正確性

人間が意図した通りにデータをコンピュータに伝えるために必要です。

(例)文字化けを防ぐために、正しい文字エンコーディングを使用する。

●具体例

・テキストデータ:文字列は、バイナリデータとしてエンコード(機械語に翻訳)されます。
・画像データ:画像は、ピクセルの色情報をバイナリデータとして表現します。
・音声データ:音声は、波形データをバイナリ形式で表現します。
・実行ファイル:プログラムの実行ファイルは、バイナリデータで構成されています。

エンコード(Encoding)

人間が理解できるデータを、コンピュータが処理できる形式に変換することです。
ここでは、よく利用されるエンコード方式について紹介します。

① URLエンコード(パーセントエンコード)

URLで使用できない文字(スペース、特殊記号など)を、%と16進数で表現します。
主にウェブブラウザやサーバー間でデータを安全に伝送するために使用されます。

【具体例】
元のURL: https://example.com/search?q=Hello World
エンコード後: https://example.com/search?q=Hello%20World

② Base64エンコード

バイナリデータをテキスト形式(A-Z, a-z, 0-9, +, /)に変換します。
メールの添付ファイルや画像データの埋め込みなど、バイナリデータをテキストベースのプロトコルで伝送する際に使用されます。

【具体例】
元のデータ: Hello
エンコード後: SGVsbG8=

③ HTMLエンコード(エンティティエンコード)

HTMLで特殊な意味を持つ文字(例: <, >, &)を、エンティティ参照(<, &など)に変換します。
XSS(クロスサイトスクリプティング)攻撃を防ぐために使用されます。

【具体例】
元のテキスト: <script>alert('XSS');</script>
エンコード後: &lt;script&gt;alert(&#39;XSS&#39;);&lt;/script&gt;

④ JSONエンコード

データをJSON(JavaScript Object Notation)形式に変換します。
ウェブAPIや設定ファイルで広く使用されています。
特殊文字はエスケープされます(" は " にエンコードされます)。

【具体例】
元のデータ: {"message": "Hello, World!"}
エンコード後: {"message": "Hello, World!"}

⑤ ASCIIエンコード

英数字、記号、制御文字を7ビットの数値で表現します。
基本的なテキストデータのエンコーディングとして広く使用されています。

【具体例】
・文字 A は 65(10進数)または 41(16進数)にエンコードされます。
・文字 a は 97(10進数)または 61(16進数)にエンコードされます。

デコード(Decoding)

コンピュータが処理できる形式を、人間が理解できるデータに変換することです。
デコード方式はエンコード方式と対になるように存在します。

文字エンコーディング(Character Encoding)

文字エンコーディングは、文字をコンピュータが理解できる数値(バイト列)に変換するためのルールです。
異なる文字エンコーディングを使用すると、同じ文字でも異なる数値で表現されることがあります。

① ASCIIエンコーディング

ASCIIは、英数字や記号を7ビットの数値で表現するエンコーディングです。

【具体例】
・文字 A は 65 で表現されます。
・文字 a は 97 で表現されます。

② UTF-8エンコーディング

UTF-8は、Unicodeを基にした可変長のエンコーディングで、世界中の文字を表現できます。

【具体例】
・文字 A は 65 で表現されます(ASCIIと同じ)。
・文字 は 227 129 130(16進数で E3 81 82)で表現されます。

③ Shift_JISエンコーディング

Shift_JISは、日本語を表現するためのエンコーディングです。

【具体例】
文字 は 130 160(16進数で 82 A0)で表現されます。

注意点

文字化けが発生する可能性、セキュリティ面で注意する必要があります。

文字化け

文字エンコーディングが正しく設定されていないと、文字化けが発生します。
例えば、UTF-8でエンコードされたデータをShift_JISでデコードすると、正しく表示されません。

セキュリティ

エンコード・デコードを誤ると、セキュリティ上の問題が発生する可能性があります。
例えば、XSS攻撃を防ぐために、ユーザー入力のエスケープ処理が必要です。

参考URL

https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89 (Wikipedia『エンコード』)
https://www.tohoho-web.com/perl/encode.htm (とほほのWWW入門『エンコード・デコード』)
https://zenn.dev/ykmra/articles/0640e31ab62b52 (『encodeとdecode』)
※一部、DeepSeek検索の内容を活用

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?