UTF-8, a transformation format of Unicode and ISO 10646

Takami Torao
Network Working Group                                       F. Yergeau
Request for Comments: 2044                           Alis Technologies
Category: Informational                                   October 1996


        UTF-8, Unicode と ISO 10646 の変換フォーマット

この記述の状態

  この記述はインターネットコミュニティに対する情報を提供する。この記述は
  どんな種類のインターネット標準をも指定しない。この記述の配布は無制限で
  ある。


概要

  Unicode Standard version 1.1 と ISO/IEC 10646-1:1993 は共に世界中のほ
  とんどの文章システムを包含する 16 bit 文字セットを定義する。しかしなが
  ら、16-bit 文字は多くの現存アプリケーションとプロトコルと両立せず、そ
  してこれはいくつかのそれぞれが異なる特徴のあるいわゆる UCS
  transformation formats (UTF) の開発に至った。この記述の対象である UTF-8
  は全 US-ASCII 範囲を維持するという特徴を持つ。US-ASCII 文字は普通の
  US-ASCII 値を持つ一つの 8 ビットバイトにエンコードされ、そのような値の
  どんな 8 ビットバイトも US-ASCII 文字にしかならない。これは US-ASCII
  値を想定しているが別の値も透過的であるようなファイルシステム、パーサー、
  その他のソフトウェアへの両立性を与える。

1.  イントロダクション

  Unicode Standard, version 1.1 [UNICODE] と ISO/IEC 10646-1:1993
  [ISO-10646] は共に世界中のほとんどの文章システムを包含する 16 ビット文
  字セット (UCS-2) を定義する。さらに ISO 10646 は、UCS-2 に相当する領域
  の外の、現在割り当てられていない 31 ビット文字セット (UCS-4) を定義す
  る。しかしながら、UCS-2 と UCS-4 エンコーディングは、8 もしくは 7 ビッ
  ト文字を想定している既存の多くのアプリケーションやプロトコルにおいて使
  いにくくもある。さらに 16 ビット文字を扱うことのできる新しいシステムで
  も UCS-4 データを処理することはできない。この状況が、それぞれが異なる
  特徴を持つ、いわゆる UCS transformation formats (UTF) の開発に至った。

  UTF-1 は、ISO 10646 から削除された、歴史的な重要性のみを持つ。UTF-7 は
  最上位ビットクリアな (7 ビット US-ASCII 値、[US-ASCII]) 8 ビットバイト
  のみに使用される Unicode レパートリーをエンコーディングの特質を持ち、
  従ってメールに安全なエンコーディング ([RFC1642]) と考えられる。この記
  述の対象である UTF-8 は 8 ビットバイトのすべてのビットを使用するが、全
  US-ASCII 範囲を損なわない特質を持ち、US-ASCII 文字は通常の US-ASCII 値
  を持つ一つの 8 ビットバイトにエンコーディングされ、そのような値のどん
  な 8 ビットバイトも US-ASCII 文字のみをあらわすことができる。

  UTF-16 は UCS-4 レパートリーのサブセットを予約された範囲から UCS-2 値
  のペアに変換する構成である。UTF-16 は、予約された範囲から UCS-2 値が
  UTF-8 変換に特別に扱われなければならない場合に影響する。

  UTF-8 は 8 ビットバイトの変化する数値として UCS-2 や UCS-4 をエンコー
  ドする。ここで 8 ビットバイトの数値とそれぞれの値は、ISO 10646 におけ
  る文字に割り当てられた整数値に依存する。この変換フォーマットは以下のよ
  うな特徴を持つ (すべての値は 16 進数である)。

  - 0000 0000 から 0000 007F (US-ASCII レパートリー) の文字値は 8 ビット
   バイトの 00 から 7F (7 ビット US-ASCII 値) に相当する。

  - US-ASCII 値は UTF-8 でエンコードされた文字ストリームにおいて別の形式
   で現れることはない。これは US-ASCII 値に基づいて解析するが、他の値に
   対して透過的であるファイルシステムや他のソフトウェア (e.g. C ライブ
   ラリにおける printf() 関数) との適合性を与える。

  - UTF-8 と UCS-4, UCS-2, Unicode のいずれかの間の Round-trip 換算が簡
   単である。

  - 複数 8 ビットバイトシーケンスの最初の 8 ビットバイトはシーケンスにお
   ける 8 ビットバイトの数を示す。

  - 文字境界は 8 ビットバイトストリームにおいてどこでも容易に見つけられ
   る。

  - UCS-4 文字列の辞書的な並べ替え順序は失われない。もちろんこれは、どち
   らも場合並べ替え順序が文化的に正当でないため、重要性が制限される。

  - 8 ビットバイト値 FE と FF は決して現れない。

  元々 UTF-8 は、単一のエンコーディングでの多言語テキストをサポートする
  UNIX システム互換の File System Safe UCS Transformation Format
  [FSS-UTF] を指定する目的の X/Open Joint Internationalization Group
  XOJIG のプロジェクトであった。元来の著者は Gary Miller, Greger
  Leijonhufvud, John Entenmann である。後に Ken Thompson と Rob Pike が
  正式な UTF-8 に対する重要な作業を行った。

  説明は Unicode Technical Report #4 [UNICODE] でも見ることができる。
  UTF-6 内の UTF-16 データの規定を含む最終的な参照は ISO/IEC 10646-1
  [ISO-10646] の Annex R である。

2.  UTF-8 定義

  UTF-8 において、文字は 1 から 6 個の 8 ビットバイトシーケンスを用いて
  エンコードされる。単一の "シーケンス" の 8 ビットバイトのみが最上位ビッ
  トに 0を持ち、文字値をエンコードするために使用される残りの 7 ビットを
  持つ。n>1 であるような n 個の 8 ビットバイトのシーケンスにおいて、はじ
  めの 8 ビットバイトは n 個の最上位ビットセットが 1 であり続いて 0 のビッ
  トを持つ。この 8 ビットバイトの残りのビットは文字をエンコードするため
  の値を含んでいる。続く 8 ビットバイトはすべて最上位ビットが 1 であり、
  続いて 0 のビットを持ち、それぞれエンコードされた文字のビットを残りの
  6 ビットに含んでいる。

  下記の表はこれら異なる 8 ビットバイトタイプのフォーマットを要約してい
  る。文字 x は UCS-4 文字値のエンコーディングビットに対して使用できるビッ
  トを示す。

   UCS-4 範囲 (hex.)        UTF-8 8 ビットバイトシーケンス (binary)
   0000 0000-0000 007F   0xxxxxxx
   0000 0080-0000 07FF   110xxxxx 10xxxxxx
   0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx

   0001 0000-001F FFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
   0020 0000-03FF FFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
   0400 0000-7FFF FFFF   1111110x 10xxxxxx ... 10xxxxxx

  UCS-4 から UTF-8 へのエンコーディングは以下のように行う。

  1) 文字値から必要とされる 8 ビットバイトの数値と上記の表の最初のコラム
    の数値を決定する。

  2) 表の2番目のコラムによる 8 ビットバイトの最上位ビットを準備する。

  3) 文字値のビットから x とマークされたビットを埋める。文字値の下位ビッ
    トから始まり、それらを最初にシーケンスの最後の 8 ビットバイトに置く。
    次は直前、etc. と続け、すべての x ビットが埋まる。

   UCS-2 (もしくは Unicode) に対する UTF-8 へのアルゴリズムは原則として、
   二つの 0 値の 8 ビットバイトをそれぞれつけた UCS-2 文字へ単純に拡張
   することにより、上記によって行われる。しかしながら、実際には UTF-16
   を通して変換された UCS-4 文字である、D800 から DFFF 間の UCS-2 値は
   特別な扱いが必要となる。UTF-16 変換は取り消されなければならず、上記
   のように変換された UCS-4 文字をもたらしている。

   UTF-8 から UCS-4 へのデコーディングは以下のように行う。

  1) UCS-4 文字の 4 個の 8 ビットバイトをすべてのビットセットが 8 となる
    ように初期化する。

  2) シーケンスにおける 8 ビットバイトの数と上記の表の 2 番目のコラム (x
    とマークされているビット) からビットエンコードを決定する。

  3) シーケンスから UCS-4 文字にビットを割り当てる。最初にシーケンスの最
    後の 8 ビットバイトから最下位ビットへ、そして x ビットがなくなるま
    で左側へ進む。

   もし UTF-8 シーケンスが 3 個以下の 8 ビットバイトならば、デコードは
   UCS-2 (Unicode と等価) に直接置き換えることができる。

   より詳細なアルゴリズムと解決策は [FSS_UTF], [UNICODE], {ISO-10646]
   の Annex R で見ることができる。

3.  例

  Unicode シーケンス "A<NOT IDENTICAL TO><ALPHA>." (0041, 2262, 0391,
  002E) は以下のようにエンコードされる。

   41 E2 89 A2 CE 91 2E

  Unicode シーケンス "Hi Mom <WHITE SMILING FACE>!" (0048, 0069, 0020,
  004D, 006F, 006D, 0020, 263A, 0021) は以下のようにエンコードされる。

   48 69 20 4D 6F 6D 20 E2 98 BA 21

  日本語の文字 "日本語" (65E5, 672C, 8A9E) に対する漢字に相当する
  Unicode シーケンスは以下のようにエンコードされる。

   E6 97 A5 E6 9C AC E8 AA 9E

MIME 登録

  この記述は [RFC1521] によって MIME 文字エンコーディング (文字セット)
  の登録の根拠として勤めるつもりである。提案された文字セットパラメータ値
  は "UTF-8" である。この文字列は、上記に概説されたエンコーディングス
  キームを使用する 8 ビットバイトシーケンスにエンコードされた ISO 10646-1
  のレパートリー文字から成り立つテキストを含むメディアタイプを分類するだ
  ろう。

セキュリティ考察

  セキュリティ問題はこの記述では論議されない。

謝辞

  以下はこの記述の下書きと論議に参加した人たちである。

      James E. Agenbroad   Andries Brouwer
      Martin J. D|rst      David Goldsmith
      Edwin F. Hart        Kent Karlsson
      Markus Kuhn          Michael Kung
      Alain LaBonte        Murray Sargent
      Keld Simonsen        Arnold Winkler

参考文献

   [FSS_UTF]      X/Open CAE Specification C501 ISBN 1-85912-082-2 28cm.
                  22p. pbk. 172g.  4/95, X/Open Company Ltd., "File Sys-
                  tem Safe UCS Transformation Format (FSS_UTF)", X/Open
                  Preleminary Specification, Document Number P316.  Also
                  published in Unicode Technical Report #4.

   [ISO-10646]    ISO/IEC 10646-1:1993. International Standard -- Infor-
                  mation technology -- Universal Multiple-Octet Coded
                  Character Set (UCS) -- Part 1: Architecture and Basic
                  Multilingual Plane.  UTF-8 is described in Annex R,
                  adopted but not yet published.  UTF-16 is described in
                  Annex Q, adopted but not yet published.

   [RFC1521]      Borenstein, N., and N. Freed, "MIME (Multipurpose
                  Internet Mail Extensions) Part One: Mechanisms for
                  Specifying and Describing the Format of Internet Mes-
                  sage Bodies", RFC 1521, Bellcore, Innosoft, September
                  1993.

   [RFC1641]      Goldsmith, D., and M. Davis, "Using Unicode with
                  MIME", RFC 1641, Taligent inc., July 1994.

   [RFC1642]      Goldsmith, D., and M. Davis, "UTF-7: A Mail-safe
                  Transformation Format of Unicode", RFC 1642,
                  Taligent, Inc., July 1994.

   [UNICODE]      The Unicode Consortium, "The Unicode Standard --
                  Worldwide Character Encoding -- Version 1.0", Addison-
                  Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is
                  described in Unicode Technical Report #4.

   [US-ASCII]     Coded Character Set--7-bit American Standard Code for
                  Information Interchange, ANSI X3.4-1986.

著者のアドレス

      Francois Yergeau
      Alis Technologies
      100, boul. Alexis-Nihon
      Suite 600
      Montreal  QC  H4M 2P2
      Canada

      Tel: +1 (514) 747-2547
      Fax: +1 (514) 747-2561
      EMail: fyergeau@alis.com