見出し画像

もう文字化けに困らない!~文字コードの基礎知識~

こんにちは、コグラフ株式会社データアナリティクス事業部に所属するモロズミです。

今回はプログラミングをしているときにエラーの原因などにもなりかねない「文字コード」について基礎知識を整理します。



文字コードとは?

文字コードとは、文字に割り振った文字集合と、文字集合をバイト列に変換する符号化方式の二つでできています。

文字集合の代表例は、日本語表記を定義した「JIS X 0208」や、世界的に使える規格として考案されたUnicodeがあります。

文字コードがないと、各言語ごとに文字の変換がばらばらになってしまい、国をまたいだ利用などで文字表記が一定せず、バベルの塔のように言語面で開発の協力が難しくなってしまうこともあるため、非常に重要なものです。


文字コードの種類

文字コードの文字集合と符号化形式についてそれぞれ下の箇条書きのようなものがあります。


文字集合

  • ASCII:米国規格

  • ISO / IEC646:国際標準規格

  • JIS X 0201:ISO / IEC646の日本版

  • ISO 8859:欧州規格

  • ISO / IEC 6429:制御文字規格

  • JIS X 0211:ISO / IEC 6429の日本版

  • JIS X 0208:平仮名、カタカナ、漢字の定義

  • JIS X 0212:補助漢字の定義

  • JIS X 0213:第三水準、第四水準漢字の定義

  • Unicode:業界標準規格


符号化形式

  • ISO-2022-JP:JIS系文字のメール符号化などで使用(通称JISコード)

  • EUC-JP:JIS系文字のLINUX系での符号化などで使用

  • Shift JIS:JIS系文字のWINDOWS系での符号化などで使用

  • UTF-8:UnicodeをASCIIは1バイト、日本語は3バイトに符号化

  • UTF-16:Unicodeを16ビットに符号化

  • UTF-32:Unicodeを32ビットに符号化


参考

文字コードに関連するエラーの原因

文字コードに関連するエラーが起きる原因は、元の文字データの文字集合の形式と対応していない符号化形式でファイルを開いたり保存したりすることによる文字化けなどがあります。

特に、せっかく開けたファイルを適切でない符号化方式で保存したために、ファイルを開けなくなってしまったら危ないですよね。

そのため、文字データを扱うときは、その文字をどの符号化形式で開くか、あるいは保存するかを慎重に調べてから操作しましょう。


文字コードに関連するエラーの対処法

まず、元のファイルにある文字が何の文字コードかは、テキストエディタで開いたときに指定されたencoding方式と、その方式で文字化けしていないかどうかで判断できます。

例えば、VSCodeでファイルを開くと、ターミナル画面の右下に文字コードが表示されます。

この例ではUTF-8で開かれて、文字化けがなければUnicode形式とわかります

ファイルを開いたり保存するときも、テキストエディタで符号化方式などを設定することができます。

VSCodeの場合、上の画面のUTF-8をクリックすると、エンコーディング(符号化)方式を指定してファイルを再度開くか、その形式で保存するオプションが表示されます
上の画面で「Reopen with encoding」を選択すると、いろいろな符号化方式で開くことができます

実際に使用する言語で、符号化形式を指定する方法などを抑えておくことはエラーを防ぐことになります。

例えば、SQLでデータを用意したテーブルにコピーするときは、次のようなコードにより符号化形式を指定します。

COPY infection.health_log FROM 'C:~.csv' encoding 'UTF8' csv header delimiter e',';

この例ではencoding 'UTF8'によってUTF-8の符号化方式を指定できました。

pythonの場合、デフォルトで設定されている符号化方式は次のコードで確認できます。

import sys
print(sys.getdefaultencoding())

上のコードを実行すると、「utf-8」のように、設定されている符号化方式が出力されます。

文字列からバイト列への変換は下のコードで実行できます。

'文字列'.encode('文字コード名')

例えば、'コグラフ'という文字列はutf-8だと次のように変換できます。

print('コグラフ'.encode('utf-8'))
#b'\xe3\x82\xb3\xe3\x82\xb0\xe3\x83\xa9\xe3\x83\x95'

ここで変換して出力された

「b'\xe3\x82\xb3\xe3\x82\xb0\xe3\x83\xa9\xe3\x83\x95'」

の文字列(バイトコード)は文字化けではないことに注意してください。

こうして変換された文字情報は、次のコードで元に戻すことができます。

b'バイト列'.decode('文字コード名')

上で生成した元が'コグラフ'の文字情報をdecodeで再変換しましょう。

print(b'\xe3\x82\xb3\xe3\x82\xb0\xe3\x83\xa9\xe3\x83\x95'.decode('utf-8'))
#コグラフ

無事、コグラフへと文字列が元に戻りました。

参考

他にも、言語ごと、環境ごとにいろいろと設定方法などに違いはあるので、ぜひご自身に適した環境での設定方法を調べてみてください!


Twitterもやってます!

コグラフデータ事業部ではTwitterでも情報を発信しています。
データ分析に興味がある、データアナリストになりたい人など、ぜひフォローお願いします!


#データ分析入門   #データアナリスト #データアナリスト募集
#私の仕事 #コグラフデータ #Python  #python #python初心者 #python3 #python独学 #python入門 


いいなと思ったら応援しよう!