システム開発の場面等で文字コードの話が出てくると時々UTF-8とUnicodeを混同している場面に出会います。多くの場面では実務上問題なかったりもしますが知っている人からすると「あぁ、この人、間違ってるなー」と思われたりしますので技術屋の嗜みとして押さえておきましょう。
結論としては、
Unicodeは符号化文字集合(扱う文字の一覧)
UTF-8は文字符号化方式(文字をどう表現するか)
です。
符号化文字集合
CCS(Coded Character Set)とも言われます。単に「文字集合」と言われることも。
「Unicode」は符号化文字集合を指しています。
Unicode登場以前はJIS X 0208(JIS第一・第二水準の漢字、ひらがな、カタカナ、英数記号などの集合)やJIS X 0213(JISX0208に第3・第4水準漢字が追加されたもの)などがありました。
システム開発の場面では後述の文字符号化方式が異なるシステムでの連携時の文字化けの話をする時に第3水準とか第4水準とかの用語が出てきますが、これは符号化文字集合の話をしているのです。
ちなみに、メインフレームの場合はEBCDIC(Extended Binary Coded Decimal Interchange Code)です。
文字符号化方式
CES(Character Encoding Scheme)とも言われます。いわゆるエンコード方式(エンコーディング)ですね。
「UTF-8」は文字符号化方式を指しています。
古くはASCIIというアルファベット・数字・記号・制御コードのみで形成されている、英語圏で必要なアルファベットと数字を定義したものがあります。今でも「アスキー文字」として会話に登場します。
以前はShift-JISやEUCが標準的に使われていましたが、今はUTF-8が良く使われます。
実務上はUTF-16(UTF-16BE、UTF-16LE)も使うことがあると思いますが、UTF-16はBE(ビッグエンディアン)付とLE(ビッグエンディアン)付があるのでどちらを使っているか気にしないといけないです。
また、UTF-8とUTF-16LEはBOM(Byte Order Mark)という識別するバイトがファイルの先頭に追加される場合と追加されない場合があるので特にシステム間連携する際にはこちらも気にしましょう。
まとめ
符号化文字方式と文字符号化方式を整理すると以下になります(代表的なもののみ)。
符号化文字集合(CCS) | 文字符号化方式(CES) |
---|---|
JIS X 0213 | Shift-JIS |
EUC | |
Unicode | UTF-8 |
UTF-16LE | |
UTF-16BE | |
EBCDIC | IBM CP930 |
IBM CP939 |
これを見ると、UTF-8のシステムとShift-JISのシステムとでデータ連携するような時は符号化文字集合も異なるのでかなり厄介だということが分かるかと思います(各システムがUTF-8に統一されると楽なんですけど、レガシーシステムが残っているうちは無理でしょうね)。
なお、「文字コード」という用語もありますが、これが符号化文字方式と文字符号化方式どちらを指しているかは定かではなく、その時々に応じて判断が必要です(大抵は文字符号化方式を指して、「このシステムは文字コードがEUCだから~」というように使われます)。
コメント