おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

文字コードを勉強してみた。

はじめに

文字コードについては今まで何となくで扱っていたのですが、お仕事で基礎から学ぶ機会があったので備忘録としてまとめていきたいと思います。

符号化文字集合文字符号化方式

文字コードは以下の2段階へ区別できます。

ja.wikipedia.org

符号化文字集合

単純に言うと文字の種類。人間が読める文字たちを集めたもの。

文字符号化方式

符号化文字集合をコンピュータが読める形にしたもの(いわゆる2進数の世界)。

文字コード一覧

上記をふまえた上で文字コードの一覧を見てみると、一般的に文字コードと言われていても中身は符号化文字集合文字符号化方式に分かれていることが分かります。

符号化文字集合 文字符号化方式 備考
ASCII ASCII 半角英数字記号
Shift_JIS Shift_JIS 日本語等の全角文字を扱えるようにした文字コード

ASCII範囲は符号化文字集合文字符号化方式が同じ
Unicode UTF-8 文字によってデータサイズが可変
ASCII文字などは1文字8ビットになるし日本語等は16ビット、24ビットなど変わったりする
Unicode UTF-16 基本的には1文字を16ビット固定で表すが、例外として1文字32ビットのものもある(サロゲートペア)
Unicode UTF-32 1文字を32ビット固定で作成

何気なく文字コードUTF-8とかUnicodeとか言ったりしていましたが、実はUTF-8Unicode文字符号化方式だったんですね。

Shift_JISとCP932

上記の表で重要なのが、Windowsで扱っているShift_JISは正確には一般的なShift_JISとは違うということです。 Windowsは一般的に言われているShift_JISを勝手に拡張したCP932というものを用いています(日本では)。

una.soragoto.net

Windowsで文字変換をしていると以下のような「環境依存」という表記を見ますが、これがいわゆるCP932です。

Shift_JISを扱う上での注意点

例えばデータ連携などの案件で「文字コードShift_JISで!」となった場合、お互いにWindows系のシステムだったら問題はない可能性が高いですが、Windows - Linuxなどの連携システムだった場合はLinux側に扱えない文字が入ってくる可能性が出てきます(Windows側はShift_JISのつもりでも実はCP932だったりするから)。

例)上記写真のような「德」の字がLinux側に連携されて文字化けしてしまう...等

おわりに

まだまだ全然書き足りないですが、たくさん書くのは面倒 長すぎても読むのが疲れると思うのでまた続きは別の記事で書いていきたいと思います。