Python

文字コードとは? CSVファイル (Excel) の文字化けの原因・直し方がわかる!

【PR】この記事には広告を含む場合があります。

laptop-computer-06136

文字コードって聞いたことはあるけど、具体的に何を指すのか、ちょっとピンとこない』

『CSVファイルをExcelで開くと文字化けしている。どうやって直せばいいの?』

『UTF-8とか、Shift_JISとか、文字コードの変換方法は?』

こんな疑問にお答えします。


この記事の内容

  • そもそも「文字コード」ってなに?(文字コードは、以外に重要な知識)
  • よく使われている「文字コード」の種類を紹介。(4つ)
  • 「Excel」や「メモ帳」の文字化けの直し方を、画像付きでわかりやすく解説。

この記事を書いているわたしは、プログラミング歴15年です。これまでの経験と知識を活かし、現在はマネージャーとして商品企画や開発チームのサポートを行っています。


実は、この「文字コード」、スマホやパソコンなど身近な家電機器の裏側で大活躍してるんです。スマホやパソコンが、わたしたちの打った文字をちゃんと認識してくれるのは、この「文字コード」のおかげなんです。

「文字コード」とは、ざっくり言うと、"文字"に割り当てられた「番号」のこと。

そして、世の中にある文字コードはひとつだけじゃないんですよね。いくつか種類があって、それぞれ特徴や使い方があるんです。

「文字コード」を理解すると、パソコンやスマホがどのように文字を解釈しているのかがわかるようになります。


記事の前半では、文字コードの基礎知識を説明しています。「これだけはおさえておきたい」って内容です。


記事の後半では、「文字化け」という「文字コード」がからむ現象について解説します。

ファイルを開くと、いきなり意味不明な文字があらわれて読めない・・・そんな経験はありませんか?

あれこそが「文字化け」。文字化けの原因となる文字コードの違いや、対処法を学んでおけば、いざってときに困らずにすみます。


ではさっそく「文字コード」の基礎知識から始めていきます。



文字コードとは、”文字”に割り当てた”番号”のこと

「文字コード」とは、パソコンが文字を扱えるよう、文字をあらかじめ決めた0とか1とかに置き換えた番号のことです。

パソコンは、人のように文字(言語)をそのまま理解して処理することができません。パソコン内部では、文字を、あらかじめ決めておいた番号に置き換えて、この置き換えた番号で文字を扱います。


どの文字を、どの番号に割り当てるか? というあらかじめ決めた割り当てルールのことを「文字コード」と言います。


パソコンは、文字をどのように理解するのか?

パソコンやスマホなどのコンピュータは、0と1の二進数(バイナリ)で情報を扱っています。

二進数は、ビット(bit)という単位で表されます。ビットは0か1のどちらかの値を持ち、8つのビットが集まったものをバイト(byte)と呼びます。

文字コードは、このバイトを使って、文字に対応する数値を表しています。


用語の説明

  • ビット(bit):Binary digitの略で、2進数で表されるデータの最小単位を指します。ビットは、0か1、2つの値があります。それ以外の値は持つことはできません。
  • バイト(byte):8ビットのデータを表します。つまり、「A」の「1000001」は7ビットのデータで、1バイト未満です。


文字コードは、意外と重要な知識(3つの理由)

文字コードは、意外と重要な知識です。理由は大きく3つあります。

  • 情報を正しく表わすため
    アプリやウェブサイトを作るとき、表示したい文字や記号を正確に表現することは最重要です。それができないと、ユーザーに正しい情報を伝えることができないからです。
  • エラー防止のため
    プログラミング時のエラーを防ぐためにも、正しく文字コードを理解しておくことが大切です。理解することで、バグの発生を抑え、開発効率もアップします。
  • 多言語対応のため
    世界中からアクセス可能なWebサイトやアプリケーションを作成するためには、多言語対応が必須です。そのためにも、文字コードの理解は不可欠です。


学習初期の頃は混乱しがちですが、がんばって理解すればWebページ作成やプログラミングで大活躍できるはずです!


文字コードには、いくつか種類があります。次から文字コードの代表例を見ていきます。


文字コードの種類(よく使われている4つ)

さまざまな文字コードが存在しますが、ここでは特に重要な4つの文字コード(UTF-8、ASCII、Shift_JIS、CP932)についてみていくことにします。

Pythonの文字コードは、「UTF-8」です。

文字コード読み方説明文字コードの例
(0x:16進数を表す記号)
UTF-8ユーティーエフエイト・世界中の文字を扱える。
・バイト数は可変で、1バイトから4バイトまで
・Pythonの標準文字コード
・Windows、macOS、Linuxなど、全てのOSで使用できる。
「あ」という文字は、0xE38182。
ASCIIアスキー・半角英数字 128文字を扱う
・7ビットの文字コード
・全てのOSで使用可能
「A」という文字は、0x41
「a」 という文字は、0x61
Shift_JISシフトジス・「日本語」の文字コード。 JIS X 0208で標準化
・バイト数は可変で、1バイトまたは2バイト
・主にWindowsで使われる。
「あ」という文字は、0x82A0。
CP932シーピーキューサンニ・「日本語」の文字コード。
・マイクロソフト社がShift_JISを独自拡張した。
・主にWindowsで使われる。
「あ」という文字は、0x82A0。
文字コードの代表例


上記の表の見方ですが、たとえば次のとおりです。

  • 文字コードが「UTF-8」の場合、「あ」という文字は、パソコン内部では、 0xe38182(0x:16進数を表す)が割り当てられています。
  • 文字コードが「ASCII」の場合、「A」という大文字は、0x41 が割り当てられています。小文字の「a」は、0x61 です。


文字コードの歴史

文字コードの歴史は古いです。

最初に広く使用されたのは、7ビットのASCIIコード。主に英語のアルファベットと一部の記号をカバーしていました。

技術の発展とともに、たくさんの言語や特殊記号をあつかう必要がでてきて、もっとたくさんの文字を表現できる「文字コード」が開発されてきました。

現在では、「UTF-8」などたくさんの文字コードがあります。


① UTF-8

UTF-8(Unicode Transformation Format-8bit)は、Unicodeを元にした可変長文字コードの一つです。

UTF-8では、1文字を1バイトから4バイトで表現します。これにより、全世界のほぼ全ての文字を表現できるのが特徴です。

具体的には、

  • ASCII文字(基本的な英字や記号):1バイト
  • 欧州の文字や記号:2バイト
  • アジア言語の文字:3バイト
  • 特殊記号:4バイト

で、表現します。


Unicode」とは、世界中のすべての文字をコンピュータ上で表現するための国際的な標準規格です。Unicode Consortium(https://unicode.org/consortium/consort.html)という団体が取りまとめています。


UTF-8の文字コードの例

文字文字コード
(16進数)
文字コード
(2進数)
説明
A0x410100 0001アルファベット大文字A
B0x420100 0010アルファベット大文字B
a0x610110 0001アルファベット小文字a
b0x620110 0010アルファベット小文字b
0xE3 0x81 0x821110 0011 1000 0001 1000 0010ひらがなの「あ」


UTF-8の利用例

UTF-8は、Webページやメール、プログラミング言語など多くの場所で利用されています。

特に、HTML5の標準エンコーディングとして採用されており、現在のWebでは最も広く利用されている文字コードです。


UTF-8のメリット・デメリット

メリット:

  • 多言語対応力がすごい:世界中のほとんど全ての文字を表現できる。英語、日本語、アラビア語、なんでもOK!これが大きな魅力。
  • 後方互換性がある:ASCII文字(英数字や記号とか)とかの、古いソフトウェアやシステムでもうまく動くことが多い。


デメリット:

  • 文字によってデータ量が変わる:アルファベットなら1バイト、日本語なら3バイトとか。なので、「この文章は何バイト?」って聞かれた時にすぐ答えられないこともあります。
  • 特定の言語ではデータ量が増える場合もある:特に東アジアの言語(例えば日本語や中国語)では、他の文字コードと比べて必要なデータ量が多くなってしまいます。


② ASCIIコード

ASCII(American Standard Code for Information Interchange)は、7ビットで128種類の英数字や制御コードを表現する文字コードです。

基本的な英字や数値、一部の記号を表現できます。

初期のコンピュータシステムで広く使われた文字コードで、今でも使われています。


ASCIIコードの文字コードの例

ASCIIコードは、英字、数字、記号のみ表すことができます。日本語の文字を表現することはできません。

文字文字コード
(16進数)
文字コード
(2進数)
説明
A0x410100 0001アルファベット大文字A
B0x420100 0010アルファベット大文字B
a0x610110 0001アルファベット小文字a
b0x620110 0010アルファベット小文字b
10x310011 0001数字の1


ASCIIコードの利用例

ASCIIは、初期のコンピュータシステムや低レベルのプログラミング(システムやネットワークの設計)で利用されています。

また、コンピュータと通信するためのプロトコル(HTTPやSMTPなど)でも利用されています。


ASCIIコードのメリット・デメリット

メリット:

  • シンプルさ: ASCIIコードは、文字を1バイト(8ビット)で表現するので、すごくシンプル。わかりやすい。
  • 計算が容易: 文字のデータ量は全部同じ大きさ(1バイト)だから計算しやすい。
  • 互換性: 昔から使われているけど、今でもいろいろなコンピュータで利用されている。つまり相性問題が少ない。


デメリット:

  • 表現力が限られている: 上記のシンプルさっていうのは少し問題もあり。ASCIIは英語と基本的な記号しか表現できないので、他の言語(例えば日本語やアラビア語)は使えない。
  • 拡張性に乏しい: ASCII自体を変更して新たに文字を追加することはできない。なので、新しい記号や文字を追加する場合は別の文字セット(UTF-8等)を使わざるを得ない。
  • 多言語環境では対応が難しい: いろいろな言語を扱うよう現代では、ASCIIでは対応しきれない問題がある。


③ Shift_JIS

Shift_JISは、JIS(Japanese Industrial Standards)をもとに、日本語を表現するために開発された文字コードです。

英数字は1バイト、日本語の文字(ひらがな、カタカナ、漢字など)は2バイトで表現します。


Shift_JISの文字コードの例

文字文字コード
(16進数)
文字コード
(2進数)
説明
A0x410100 0001アルファベット大文字A
B0x420100 0010アルファベット大文字B
a0x610110 0001アルファベット小文字a
b0x620110 0010アルファベット小文字b
0x82 0xA01000 0010 1010 0000ひらがなの「あ」


Shift_JISの利用例

Shift_JISは、Windowsや一部のMac OSで利用されています。

また、多くの業務系システムやレガシーシステムでも採用されています。


Shift_JISのメリット・デメリット

メリット:

  • 日本語表現が豊富:Shift_JISは、日本語の表現が豊富です。色々な文字や記号を使うことができる。
  • 対応ソフトウェアが多い:多くのソフトウェアやシステムがShift_JISに対応しているから、安心して使える。
  • 日本国内での利用に適している:日本のPCや携帯電話など、国内で使用する機器への対応度が高い。


デメリット:

  • 他言語との互換性が低い:他の言語を表示したり、入力したりする際には制限が出てくることもある。
  • 一部文字が表示できない:全ての文字をカバーしているわけではない。一部表示できない文字もあるので注意が必要。


④ CP932

CP932は、Shift_JISを基に、Microsoftが独自に拡張した文字コードです。

Shift_JISと同じく、英数字は1バイト、日本語の文字は2バイトで表現します。ただし、Shift_JISにない一部の文字を追加しています。


CP932の文字コードの例

文字文字コード
(16進数)
文字コード
(2進数)
説明
A0x410100 0001アルファベット大文字A
B0x420100 0010アルファベット大文字B
a0x610110 0001アルファベット小文字a
b0x620110 0010アルファベット小文字b
0x82 0xA01000 0010 1010 0000ひらがなの「あ」


CP932の利用例

CP932は、Windowsのシステムやアプリケーションで広く採用されています。

また、Microsoftのソフトウェア(Officeなど)でも利用されています。


CP932のメリット・デメリット

メリット:

  • Windows環境での互換性が高い: Windows環境下では扱いやすい。
  • 使える文字多い: CP932はShift_JISの拡張版なので、Shift_JISには存在しない文字も表現できます。このため、より多様な文字を使用することができる。
  • 記号がたくさんある: CP932には豊富な記号類が含まれています。これにより、いろいろな記号を使った情報伝達ができる。


デメリット:

  • 非Windows環境での互換性: Windows以外の環境(例えばMacやLinux)では、CP932と完全に互換性があるわけではない。その結果、非Windows環境でCP932文書を開くと「文字化け」することがある。
  • 複雑さ: CP932は1バイト(半角)もしくは2バイト(全角)で1文字を表現する。しかし何バイトでどの文字を表現するかは一定では無いので、プログラムでは扱いにくい。


以上、主な文字コードの特徴について解説しました。

「文字コード」は一種の「翻訳機」みたいなもので、ヒトが理解できる文字や記号を、コンピュータが理解できる数値データに変換する役割を果たしています。

コンピュータが文字情報をどうやって解釈しているかについて、少しでも知識が深まればうれしいです。


次は、「文字化け」の原因や解決策を解説していきます。


文字化けの原因は、『文字コード』の違い

文字化けが起こった画面(事例)

shift-jis_utf-8_text garbling

パソコンで作業してると、上記のような画面を見たことありませんか?(上の図は、Excelで文字化けが起きた状態)

この画面のように、本来表示されるべき文字が、別の文字や記号に置き換わってしまう現象のことを、「文字化け」(読み:もじばけ)といいます。


「文字化け」が起こる原因は、文字コードが違うからです。文字化けは、正しく理解して対策を立てれば解決できます。

それでは、文字化けの原因と直し方について順番に解説していきます。


文字化けの原因は、文字コードの違い

「文字化け」が起こるのは、「文字コード」の違いが原因です。

たとえば、MacとWindowsのパソコンで、同じ「あ」に見えても、パソコンの中で扱う文字コード(番号)は違います

ヒトの見た目では同じ「あ」でも、MacとWindowsでは文字コードが違うので、Macで保存したファイルを、Windowsで読み込むと、文字が誤って解釈され、見た目が変わってしまう、という現象が起こります。

これが「文字化け」です。


「文字コード」は、文字とコンピュータ内部での表現(通常は数字)とを関連付けるもので、ヒトから見た文字は同じでも、コンピュータの内部では異なる文字コードになっていることがあります。


文字化けの直し方(事例3つ)

ここでは、「文字化け」の直し方の例を3つ紹介します。

  • 例①: CSVファイル(Excel)の文字化けの直し方
  • 例②: Windowsの「メモ帳」の文字化けの直し方
  • 例③: Webページの文字化けの直し方


文字化けの直し方の基本手順

文字化けが起こったとき、どうやって直すか? 以下の手順が基本的な流れです。

  • 今表示している「文字コード」は何かを調べる
    現在開いて見ているファイルが、どの文字コードで表示されているかを調べます。
    文字コードは、PCのテキストエディタの画面上に、表示されていることが多いです。
    (例)Windowsメモ帳や、VSCodeでは、画面の右下辺りに、「UTF-8」といった文字コードの名前が表示されています。
  • 元々の「文字コード」は何かを調べる
    最初にファイルが作成・保存されたときに、何の文字コードが使われたかを調べます。
    普通はファイルを作成した人が知ってるはずですが、その人を探すこと自体難しいので、ここは自分でツールを使って調べます。
  • 適切な「文字コード」に変換する
    元々の文字コードから、現在ファイルを見ているシステムで使われている文字コードに変換します。


「文字化け」を直すときは、必ず、事前にバックアップをとりましょう

あとで、「やっぱり元に戻したい。」ってなったときに、元に戻せない場合もあるからです。

文字化けを直す前に、文字化けしているファイルは、必ず、ファイルをコピーして、バックアップしておきましょう!


例①:CSVファイル(Excel)の文字化けの直し方

CSVファイルをダブルクリックで開くと、自動的にExcelが立ち上がって、上図のように「文字化け」していることがあります。


Excelで文字化けしている場合は、一旦、Excelを閉じます。閉じてから、以下の手順を試してみてください。


文字化けの直し方の手順

文字化けしているCSVファイルを、右クリック → 「編集」をクリックします。

Windowsの「メモ帳」が起動 → 文字化けせずに正しく表示できるか確認します。(以下は、文字化けが解消した場合)

「ファイル」→「名前を付けて保存」の順にクリックします。

下向きの矢印「▼」ボタンをクリック →「文字コード」の中から「ANSI」を選択します。

Excelでは、「ANSI(Shift_JIS)」が使われています。メモ帳で保存するときの文字コードを、Excelと同じ「ANSI」にすることで、Excelで文字化けせずに開くことができます

文字コードに「ANSI」が選択されていることを確認します。

文字コードが「ANSI」でない場合、Excelの文字化けは直りません!

ANSI」が確認できたら、「保存」ボタンをクリックします。

「既に存在します。上書きしますか?」と表示 →「はい」ボタンをクリックします。


もし、以下のような画面が表示されたときは、ExcelでCSVファイルを開いているのが原因です。

以下の「OK」ボタンをクリック → Excelを閉じます

Excelを閉じたら、もう一度、メモ帳の左上の「ファイル」→「名前を付けて保存」の順にクリックします。

次に、文字コード「ANSI」を選ぶ → 「保存」ボタンをクリックします。

以上で、文字コードを変更し、ファイルを保存できました。

メモ帳の右上「×」ボタンをクリックして、メモ帳を閉じます。

CSVファイルをダブルクリック → Excelを起動します。

以下のように文字化けせずに表示されていたら、作業完了です。


例②:Windows「メモ帳」の文字化けの直し方


文字化けの直し方の手順

Windowsの「メモ帳」が起動します。

「ファイル」→「開く」をクリックします。

文字化けしているファイルを選択します。(以下の例では、テスト.txt)

下向きの矢印「▼」ボタンをクリック →「文字コード」の中から「自動検出」を選択します。

garbled-text-memo-05

「開く」ボタンをクリックします。

文字化けせずに正しく表示できるか確認します。(以下は、文字化けが解消した場合)

文字化けが解消しない場合は、次のやり方を試してみてください。

(1)文字化けが解消しない場合は、メモ帳の「ファイル」→「開く」をクリックします。

(2)もう一度、文字化けしているファイルを選択 →下図のように、別の文字コードに変更 → 「開く」ボタンをクリック。

(3)文字化けせずに正しく表示できれば作業完了です。

もし、文字化けしたままなら、文字コードを変えながら、(1)~(3)を繰り返します。


例③:Webページの文字化けの直し方

Webページが文字化けする原因は、アクセスしているWebページの文字コードと、自分が使っているブラウザ(例:Chrome)の文字コードの設定が、一致していないからです。


文字化けの直し方の手順

Chromeブラウザの場合、「Chrome拡張機能を使う」と記載されています。

>>文字化けに対応するためのエンコード設定(Google公式サイト)


文字コードの変換方法と注意点

ここでは、文字コードの変換方法と、変換時の注意点について説明しています。

文字コードの変換は、Windowsの「メモ帳」やMacの「テキストエディット」でかんたんできます。


① Windowsの「メモ帳」で文字コード変換する

Windowsの「メモ帳」を使って、文字コードを変換する方法を説明します。

>> 知ってる?Windowsの「メモ帳」を使えば、文字コード変換がすぐできる!

あわせて読みたい
Windows Text file by notepad
知ってる?Windowsの「メモ帳」を使えば、文字コード変換がすぐできる!

続きを見る


② 無料のテキストエディタ「VSCode」で文字コード変換する

VSCode」を使って、文字コードを変換する方法を説明します。

>>【VSCode】実は、40種類以上の文字コードを変換できます!

あわせて読みたい
programming-in-binary-code
【VSCode】実は、40種類以上の文字コードを変換できます!

続きを見る


③【参考】プログラミング言語「Python」で、文字列と文字コードを変換する

これは、番外編です。

プログラミング言語「Python」を使って、文字列と文字コードをお互いに変換する方法を説明しています。

>> 【Python】encode・decodeメソッドで、文字列⇔文字コードをかんたん変換!(UTF-8・Shift_JIS)

あわせて読みたい
47402098_building-website-project
【Python】encode・decodeメソッドで、文字列⇔文字コードをかんたん変換!(UTF-8・Shift_JIS)

続きを見る


文字コードを変換する理由

文字コードを変換する理由は、異なる文字コードが混在することによる「文字化け」を解消するためです。

「文字化け」は、文字コードと表示システムの不一致から発生します。

例えば、「Shift_JIS」で書かれた日本語の文章を、「UTF-8」として読み込もうとすると、文字が誤って表示されてしまいます。

「文字化け」を防ぐためには、文字コードを適切に変換することが必要です。


【注意点】データを失わないために

文字コードの変換によって、元の文字が失われる可能性があります。


文字コード変換するときの、チェックリスト:

  • 変換前に元のファイルのバックアップを取る。
  • 変換後は必ず内容を確認し、「文字化け」が発生していないかチェックする。
  • 全ての文字が正しく変換されたことを確認する。特に、記号や特殊文字の扱いには注意する。


以上、文字コードの変換方法について説明しました。

文字コードは、コンピュータ同士がお互いに話すための「言葉」のようなものなんですよね。

パソコンやスマホがその「言葉」をどう使っているかを理解しておけば、「文字化け」が起こったとしてもあせることはありません。適切に文字コードを変換することで、スムーズに仕事を進められるはずです。


文字化けの予防策

文字化けを防ぐ予防策(5つ)

文字化けを未然に防ぐためには、以下のような予防策をとることが有効です。

  • 新しいファイルを作成するときや、ファイルを保存するときは、常に文字コードを確認する
  • 統一した文字コードを使用する(例:UTF-8)
  • 既存のファイルを開く前に、文字コードを確認する
  • 文字コード変換ツールを活用する
  • 不明な文字コードのファイルは開かない

上記の予防策をとることで、「文字化け」を未然に防ぐことができます。


文字コードを統一するなら、UTF-8

標準の文字コードとしては、「UTF-8」がよく使われています。

というのも、UTF-8はたくさんの言語に対応で、互換性が高く、広く利用されているからです。

どの文字コードを基準にするかは、本来は、使用するシステムや目的によりますが、ほとんどの場合、上記の理由から「UTF-8」が推奨されます。一番無難だと思います。


まとめ:文字コードとは?

この記事では、「文字コード」の基礎知識と、「文字化け」の直し方について説明しました。

おさらいすると、「文字コードとは、”文字”に割り当てた”番号”のこと」であり、「文字化け」の主な原因は「文字コードの違い」ということでした。


次に、文字化けの直し方を、CSVファイル(Excel)や、Windowsの「メモ帳」の事例で解説しました。

具体例を見ることで、この記事を読む前よりは、ざっくりでも「文字コード」をイメージできたんじゃないかと思います。

以上、参考になれば幸いです。


-Python