書籍案内 » 書籍案内 » 定期刊行物一覧 » WEB+DB PRESS » WEB+DB PRESS plusシリーズ » プログラマのための文字コード技術入門 » UnicodeとUTF-8とUCS-2の関係 ――符号化文字集合? 文字符号化方式?

書籍関連記事

プログラマのための文字コード技術入門

UnicodeとUTF-8とUCS-2の関係 ――符号化文字集合? 文字符号化方式?

『プログラマのための文字コード技術入門』(p.116)を元に一部改変
矢野 啓介

UnicodeとUTF-8とUCS-2,UCS-4など,Unicode関連用語は,いわゆる用語解説にあたるだけでは理解するのに混乱しがちな話題かもしれません。それぞれの用語が登場した経緯や,符号化文字集合,符号化方式としてどういった存在かについて追っていくと,きちんと理解されることと思います。ここでは,簡単に整理してみることにしましょう。

まとめると,Unicodeは整数値で表される符号位置と文字とを対応付けています。そして,その整数である符号位置をコンピュータで用いるバイト列の形で表現するための方式として,UTF-8やUTF-16やUTF-32といった各種の符号化方式が定められており,用途に応じて使い分けるようになっています。

たとえば,「山」という文字の符号位置はU+5C71だということがUnicodeとして決まっています。符号位置の整数値0x5C71をUTF-16で符号化すると5C71という2バイトに,UTF-8で符号化するとE5 B1 B1という3バイトに,UTF-32では00 00 5C 71という4バイトになるということです(ここではUTF-16とUTF-32のバイト順としてビッグエンディアンを採用しています)。

ただし,歴史的な経緯としては,上に述べたような「整数値の符号位置を符号化方式によってバイト列に符号化する」という概念が元々あったわけではありません。当初は,Unicodeといえば16ビット固定長のコードというのが売り文句だったように,「山」という文字に5C71という16ビットのビット組み合わせが対応するというのがUnicodeで定義される内容でした。これはISO/IEC 10646で規定されるUCS-2と同じです。

Windowsのメモ帳のファイル保存のダイアログで,文字コードの選択肢として現れる「Unicode」は,実際にはUTF-16を意味しています。これは,かつてUnicodeが16ビット固定長の文字コードであったことの名残りといえるでしょう。メモ帳ではUTF-8は「Unicode」とは別に「UTF-8」として選択肢に現れます。

時々「UCS-2は符号化文字集合なのか文字符号化方式なのか」といった悩みを見かけることがあります。UCS-2は符号化文字集合だと聞いたけど,UTF-16は符号化方式のはずだ。でもUTF-16はUCS-2の拡張だという。すると一体……?ということでしょう。

用語はひとまずおくとして,肝心なのは中身です。UCS-2が定める内容というのは,上に記したような,「山という文字に5C71という16ビットが対応する」といった対応付けの規則の集合です。それを符号化文字集合と呼ぶか文字符号化方式と呼ぶかは,用語の定義次第でどちらにも言えます。用語法にはいくつかの流派があるので,どれを採用するかによって呼び方も変わります。ただ,こうしたUCS-2の定義内容が,ISOで以前から使われている「符号化文字集合」(coded character set)(※注)にちょうど合致することは確かです。

※注)
ISO/IEC 10646:2003「Information technology -- Universal Multiple-Octet Coded Character Set (UCS)」の4.9項に,この用語の定義があります。

著者プロフィール

矢野啓介(やのけいすけ)

北海道札幌市出身,工学修士(北海道大学,システム情報工学専攻)。(株)富士通研究所に勤務し企業向けソフトウェア技術の研究開発に従事するかたわら,ライフワークとして文字の符号化を探求。オープンソースの仮名漢字変換ソフトウェアSKKのJIS第3第4水準漢字辞書の開発に携わる。ソフトウェア工学分野の研究により,情報処理学会から2017年度山下記念研究賞を受賞。

トラックバック

コメント

  • 文字コード

    文字コードについて学べた

    Commented : #4  坂本大宜 (2026/06/28, 23:41)

  • Re:

    普段何気なく使っている文字コードにはUnicodeやUTF-8、UTF-16などさまざまな種類があり、それぞれ役割が違うことを初めてしっかり理解できた。特に、Unicodeは文字そのものに番号を割り当てるものであり、UTF-8やUTF-16はその番号をコンピュータ上でどのように表現するかという「符号化方式」だという説明が印象に残った。今まで「Unicode=文字コード」くらいの曖昧な認識しかなかったが、それぞれの違いを知ることで、文字化けなどが起こる理由も少し理解できた。

    Commented : #3  山田愛桜 (2026/06/01, 18:50)

  • 文字コード

    この文章を読んで、文字コードの仕組みが少し理解できた。Unicodeは文字そのもの、UTF-8などはその表し方だと分かりやすかった。普段何気なく使っている文字にも仕組みがあると知り、興味を持った。

    Commented : #2  門脇璃乃 (2026/06/01, 18:49)

  • Re:

    普段何気なく使っている文字コードにはUnicodeやUTF-8、UTF-16などさまざまな種類があり、それぞれ役割が違うことを初めてしっかり理解できた。特に、Unicodeは文字そのものに番号を割り当てるものであり、UTF-8やUTF-16はその番号をコンピュータ上でどのように表現するかという「符号化方式」だという説明が印象に残った。今まで「Unicode=文字コード」くらいの曖昧な認識しかなかったが、それぞれの違いを知ることで、文字化けなどが起こる理由も少し理解できた。

    Commented : #1  山田愛桜 (2026/06/01, 18:49)

コメントの記入