文字コードってなんですのん? 文字コード最初の一歩の超々入門!

文字コード utf-8 shift-jis

 

 

こんにちは。ナガオカ(@boot_kt)です。

 

UTF-8やShift-JISとかってたまぁ~~~~~に聞くけど・・・、

なにソレ!?

もしくは、

ソレなに!?

って思っていませんか?

文字コードを説明しだすと丸々一冊の本になっちゃうので・・・・、文字コードの初歩の初歩の初歩の、更に初歩の解説を、チョーーーーーーー簡単にサクッと説明しますね

※↓こんな感じで実際に丸々一冊の本になってます

この記事のザックリした内容
◆対象読者

  • 文字コードが分からない
  • UTF-8やShift-JISってなに?
  • 文字コードを知りたいけど、かと言って難しい話はイヤ!

 

◆解決できるかも知れないお悩み

  • 文字コードとはまではいかないけど、文字コードの仕組みの基礎知識
  • UTF-8とShift-JISの違い

 

◆どうやって解決するか

  • テキストファイル(UTF-8/Shift-JIS)を使って説明します

 

 

 

文字コードって何?

簡単に言うと、

文字コード = 数値と文字の対比表

です

コンピューターで文字を読んだり書いたりするためのルールみたいなモンですな

 

コンピューターが理解できるのは数値だけですし、ハードディスク(or SSD)に保存されるのも数値だけです

 

テキストエディタでという文字を入力して保存しても、実はハードディスク(or SSD)には数値だけが保存されているのです
決してという文字そのものは保存されていません
 

でも、普段何の問題もなくコンピューターで文字使えてるやん!!

って思うでしょ?

それは、

コンピューターが、文字コードと呼ばれる数値と文字の対比表を使って変換してくれているだけなんです

 

コンピュータは数値しか理解できないけど、人間はコンピューターを介して文字をやり取りしたいんですよ
そしたら、数値を無理矢理文字に当てはめるルールを作るしか無いじゃないですか
文字を書いた人と文字を読む人、双方とも同じルール(←文字コードのこと)で数値を書いて読むということが必要になります

サムはマイクと同じルールで読みましたので「あ」をゲットできました。
ウィリーはUTF-8という違うルールで読みましたので、ちゃんと読み取れないですよね。
たまたまUTF-8というルールの中に130 160が無かったので読み取れなかったですけど、もし130 160がUTF-8の中に存在してたら別の文字として読み取ってしまいます

 

ポケベル知ってる?
ポケベル世代の方なら、0840ってすぐ分かりますよね?
そうです「おはよう」です

それ以外にも、仲間内だけで決めた暗号のようなものを決めてなかったですか?
例えばですが、123ならいつものとこで会おうとか、456なら電話してねとか

それらも文字コードの一種みたいなものと言えば似たようなもんですね

 

Shift-JISという文字コード(数値と文字の対比表)の場合を見てみよう

130 160という連続した数値を読み取る
 ↓
という文字を画面に表示する

130 162という連続した数値を読み取る
 ↓
という文字を画面に表示する

130 169という連続した数値を読み取る
 ↓
という文字を画面に表示する

…というようなことをコンピューター君はやってくれています

 

参考URL

 

混乱しそうなら読まなくていいです
ただ、注意としては、コンピューターは特にという文字を認識している訳ではありません
という形のものを表示しているにすぎないです
 

フォントってインストールできますよね

>> [Windows]Googleフォントを自分のパソコンにインストールしよう!
 

そのフォントは誰かが作ったものですよね
で、どうやってそのフォントを作ったかと言うと、結局絵を書いたようなもんですよね

なので、コンピューターからしたら文字なのかどうかは知らない(って言うか文字という概念は無い)けど

「はいはい、に相当する物をフォントという種類のファイルから探して、画面に表示したらいいんでしょ!?フンっ!」って感じでやってくれているだけです

Shift-JISという文字コードの一例
数値 文字
130 160
130 162
131 65
136 159
130 96 A(←全角)
130 80 1(←全角)

 

Shift-JISのテキストファイルの本当の正体を見てみよう!

関連記事
  • 先にこちらの記事を読んでおいてください
  • WindowsとMacのバイナリエディタについて言及していますので、見ておいてね

[Win/Mac]バイナリファイルの中身をそ~っと覗いて見てごらん数字の羅列で目が泳ぐ

  1. テキストエディタでを入力して保存
  2. バイナリエディタで保存したファイルを開きます
    左側に見える82 A0という数値がひらがなの正体です!

    82 A0130 160について
    82 A0というのは16進数という手法(数の数え方)を使っています
    普段私達が使っている10進数というごく普通の数え方なら130 160になります
    この記事では16進数については触れません
    記事中では10進数に置き換えて記述しますので、あまり気にしないでください

UTF-8という文字コード(数値と文字の対比表)の場合を見てみよう

227 129 130という連続した数値を読み取る
 ↓
という文字を画面に表示する

227 129 132という連続した数値を読み取る
 ↓
という文字を画面に表示する

130 139という連続した数値を読み取る
 ↓
という文字を画面に表示する

…というようなことをコンピューター君はやってくれています

 

参考URL

 

UTF-8という文字コードの一例
数値 文字
227 129 130
227 129 132
227 130 162
228 186 156
239 188 161 A(←全角)
239 188 145 1(←全角)

 

実際にテキストファイルの本当の正体を見てみよう!

関連記事
  • 先にこちらの記事を読んでおいてください
  • WindowsとMacのバイナリエディタについて言及していますので、見ておいてね

[Win/Mac]バイナリファイルの中身をそ~っと覗いて見てごらん数字の羅列で目が泳ぐ

  1. テキストエディタでを入力して保存
  2. バイナリエディタで保存したファイルを開きます
    左側に見えるE3 81 82という数値がひらがなの正体です!

    E3 81 82227 129 130について
    E3 81 82というのは16進数という手法(数の数え方)を使っています
    普段私達が使っている10進数というごく普通の数え方なら227 129 130になります
    この記事では16進数については触れません
    記事中では10進数に置き換えて記述しますので、あまり気にしないでください

 

ここまで読んでみて、もう一回見て欲しい

最初の方で出した図ですが、もう一度見てください
最初見たときより、意味が分かりやすくなってませんか?

サムはマイクと同じルールで読みましたので「あ」をゲットできました。
ウィリーはUTF-8という違うルールで読みましたので、ちゃんと読み取れないですよね。
たまたまUTF-8というルールの中に130 160が無かったので読み取れなかったですけど、もし130 160がUTF-8の中に存在してたら別の文字として読み取ってしまいます

 

広告




 

さいごに、

文字コードって単に数値と文字の対比表と言いながら、結構奥は深いんですよ
僕も文字コードの事はよく分かっていなくて、現在勉強中です

この記事では、Shift-JISとUTF-8だけに絞って、更に簡単なことしか書いていません
文字コードの超々入門としてはこのぐらいがいいかなと思い、上っ面な事だけ書いています

 

昔はEUCとかShift-JISとか色々と文字コードがあって困らされましたが、最近はUTF-8で落ち着いてきましたね

今は個人的な使い方ならもうUTF-8だけで困ることは基本的には無いです

一般的な使い方なら、書いた側と読む側が同じ文字コードを指定すればいいだけですし、アプリが勝手に判断してくれるのであまり人間が意識する必要はないですね。

 

しかし…..仕事で使う日本語版WindowsのDOSがShift-JISじゃないとダメっていうのが面倒なんですよ

自宅でRubyとかPythonとかCとかJavaとかbatとかでプログラミングする際DOSプロンプトを多用するんですけど、UTF-8で書いちゃってしょっちゅう文字化けを起こしちゃいます

DOSがUTF-8に対応しろよ!とその度に思っています
※Windows10だともしかして対応してるのかな?

 

この記事が文字コードに対するあなたの理解の助けになれば嬉しいです

 


 

プログラミング のレッスンに興味がある方、レッスン内容を聞いてみたい方、なんなりとお問い合わせください。
無料体験レッスンもありますのでお気軽にどうぞ!!!

 

 

文字コード utf-8 shift-jis

2 件のコメント

  • 文字コードについて理解してないため調べていてこのサイト見つけました。
    大変わかりやすくかつ自分で文字コードについて検証作業もでき理解ができました。
    ありがとうございます。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    ABOUTこの記事をかいた人

    Windows/Mac/Linuxを使う現役システムエンジニア&プログラマ。オープン系・組み込み系・制御系・Webシステム系と幅広い案件に携わる。C言語やC#やJava等数多くのコンパイラ言語を経験したが、少し飽きてきたので、最近はRubyやPython、WordPressなどのWeb系を修得中。初心者向けのプログラミング教室も運営中。オンライン・対面・出張等でプログラミングをレッスンします。