レッスン2 / 5問目

『エンコーディングutf-8』

このレッスンでは引き続きopen関数によるファイル操作について学習していきましょう。

open関数の第一引数はファイルパス、第二引数はモードを指定すると説明しました。実はopen関数には第三引数を指定することができ、第三引数にはencoding(エンコーディング)を指定します。

エンコーディングとは

エンコーディングは簡単に説明すると文字化けを防ぐためのものです。文字化けとは以下のような文字列です。

縺ゅ>縺�∴縺� �撰シ托シ抵シ�

文字化けに関してはインターネットを使っていればたびたび目にするかと思います。このような文字化けを起こさないためにファイルを開く際にencodingというものを指定します。

ここではエンコーディングについて理解するために以下の内容を見ていきます。

  • コンピューターは1と0しか扱えない
  • 文字コードとは
  • 文字化けの原因

コンピューターは1と0しか扱えない

実はコンピューターは0と1しか扱えません。

初めて聞く方にとっては驚きかもしれませんが、コンピューターは0と1で全てを表現しているのです。電流が流れている状態を1、電流が流れていない状態を0で表します。
人間にとっては0と1しか扱えないというのは不便に感じるかもしれませんが、コンピューターにとっては0と1だけの方が都合がよいのです。

では、コンピューターは0と1しか扱えないのに、どのようにして、漢字やひらがなやアルファベッドを表現しているのでしょうか。
それには文字コードと呼ばれる対応表を使用します。

文字コードとは

文字コードとは文字の対応表です。

コンピューターは0と1しか表現できないため、0と1を使用して文字を表現します。

例えば、ASCIIという文字コードでは「A」を以下のように「01000001」で表現します。

A01000001

このように全ての文字に対して、対応する番号(2進数)があり、以下はその対応表(文字コード)の一部です。

A01000001
B01000010
C01000011

上記のような文字コードには様々な種類があり、
代表的な文字コードとして「utf-8」や「Shift-Jis」などがあります。

文字化けの原因

では、なぜ文字化けが起きるのでしょうか。その答えは、文字コードによって対応表が異なるためです。

ある文字コードでは「A」を「00000001」と表現しており、 他の文字コードでは「A」を「01010101」と表現している。また他の文字コードでは「A」を「11100100」と表現する。といったように、文字コードにより対応する値が異なります。

これらの文字コードの違いから文字化けが発生するのです。

そして、文字化けを防ぐためにencoding(文字コード)を指定します。

エンコーディングの例

ではエンコーディングを行う例を見ていきましょう。

以下の例ではファイルsample1.txtを「utf-8」でエンコーディングして読み取っています。

  1. file = open("/sample1.txt", "r", encoding="utf-8")    # utf-8でエンコーディング
  2. print(file.read())
【サンプルファイル1】 これはサンプルファイルです。

当サイトのレッスンではエンコーディングを指定しなくても、文字化けすることはありませんが、
実際には、文字化けが発生する可能性がありますので、エンコーディングを指定するエンコーディングを指定するようにしましょう。

また、エンコーディングには様々な種類がありますが、最もポピュラーなエンコーディングが「utf-8」です。
エンコーディングを指定する際はほとんどの場合「utf-8」を指定すれば問題ありません。

では、このレッスンは以上となります。演習課題にチャレンジしましょう。

Lesson1

下記ファイルを読み取った内容を出力してください。なお、エンコーディングにutf-8を指定してください。

Last updated:2019/12/20

【サンプルファイル1】

これはサンプルファイルです。
  1. # 問題1
  2. file = open("/sample1.txt", "r", encoding="utf-8")
  3. print(file.read())
main.py
設定
g
n
i
d
a
o
L