Unicode

Unicode

[1] Unicode (ユニコード) は、世界中の様々な文字記号を含む符号化文字集合と、 その運用のための正規化照合順序等の規定によって構成される文字コード規格です。

[20] Unicode計算機関係の企業によって構成される標準化団体 Unicode Consortium による The Unicode Standard において規定されています。

[44] 団体や同団体による関連仕様については、 Unicode Consortium を参照。

仕様書

[36] かつては書籍として販売されていましたが、現在では無料で PDF を入手できます。また、周辺仕様群は UTS / UTR として HTML で出版されています。文字の特性その他のデータは UCD としてテキストファイルで配布されています。

Unicode と ISO/IEC 10646

[21] ISO/IEC による国際標準である ISO/IEC 10646 が規定する UCS は、符号化文字集合としては実質的に Unicode と同じです。 (「実質的」にというのは、理論上は UCS の方が Unicode より多くの文字符号化できる余地があるからです。) ISO/IEC JTC1/SC2/WG2Unicode ConsortiumUTC は共同で標準化作業を行っています。

[15] 標準化団体同士の協力関係だけでなく、中心メンバーも重複しているようです。

[23] 当初は ISO/IEC 10646Unicode は同じものを規定するだけで別の仕様でしたが、 現在では ISO/IEC 10646 が一部の規定で The Unicode Standard を参照していたり、 UNICODE という名前の文字集成を定義していたりします。

[24] UnicodeUCD などとして大量の実装のために必要な情報を公開していますが、 その内容のほとんどは Unicode 独自のものであり、 ISO/IEC 10646 には含まれていません。また、 The Unicode Standard には世界各地の文字について詳細な解説が含まれていますが、 ISO/IEC 10646 は基本的に文字例示字形を示す程度のことしかしていません。 従って実用上 ISO/IEC 10646 単体での実装は困難です。

[25] 最近の IETFW3C の仕様は、大抵は ISO/IEC 10646 ではなく The Unicode Standard を参照しています。

[14] UnicodeISO/IEC 10646 の改訂には時間差があります。 どちらのどの版がおおよそどの版までとは言えますが、厳密な対応関係は無いようです。

対応国内規格

[22] Unicode そのものに対応する JIS はありませんが、 ISO/IEC 10646 に対応する JIS として JIS X 0221 があります。ただし数年に一度しか更新されないため、 基本的に古い内容です。

[39] 文字コードに限らず情報系分野全般に言えることですが、 JIS には影響力が無いだけでなく内容が古いので、参考にもなりません。 人によっては最新の英語の仕様より少し古くても日本語で読みたいと思うかもしれませんが、 新版で変更されたり修正されたりしている古い規定が含まれていることも多いので、 JIS の存在はむしろ有害です。

Unicode の版

[26] Unicode は数ヶ月に一度のペースで更新されており、新しい文字が追加されたり、 UCD に情報が追加・変更されたりしています。

[27] 基本的には Unicode の新しい版は古い版をすべて含み、それを拡張したものとなっていますが、 非互換な変更が行われたことも何度かあります。

[28] Unicode 1.1 よりも前には多くの変更が行われていました。 Unicode 1.1ISO/IEC 10646-1:1993 に相当するもので、この版で Unicode がはじめて完成したと考えることができます。

[29] Unicode 2.0 では Korean mess などと呼ばれるハングルの大規模な非互換変更が行われました。

[30] 現在では Unicode Consortium文字符号化やいくつかの特性についての安定性に関する方針を設けており、 その範囲においては新しい版になっても非互換性なく利用できるとされています。

[31] Unicode を参照している仕様の中には、このような安定性に関する問題のため、 あるいは構文チェックなどのために未割当符号位置の範囲を確定する必要があるためなどの理由で、 特定の Unicode の版を要求しているものがあります。

Unicodeの版ISO/IEC 10646の版の項を参照してください。

[32] 例えば第5版以前の XML 1.0 は、第1版当時の Unicode 2.0 に基づき名前文字が決められていました。 Stringprep は、 Unicode 3.2 に基づき変換する文字や利用できる文字が決められており、 正規化Unicode 3.2 により行うとしています。

[33] しかし特定の Unicode の版に固定することで、それ以後追加された文字が使えないなど実用上の問題が生じているため (最初からちょっと考えればわかりそうなものですがw)、版の指定は外すようになってきています。 OS や実行環境に含まれる Unicode の実装に処理を委ねている場合、プロトコルや言語によって異なる Unicode の版を併用することが困難という事情もあります。

[34] 例えば IDNA2003 仕様は Stringprep により Unicode 3.2 に固定されていましたが、 IDNA2008Unicode が改訂される度に追随することになっていますし、 Webブラウザーが実装している IDNA は最新版の Unicode を使っています。

[48] XML 1.0 5eXML 1.0 4e までの Unicode 2.0 ベースの定義を廃して改版のたびに改訂せずに済む定義に変更しています。

[49] HTML Standard は最新版の Unicode を参照しています。 JavaScript は特定の版の Unicode またはそれ以降の版を実装することを要求しています。

符号化方式

[37] 文字コードに関する参照処理モデルに従えば、任意の文字コードUnicode符号化方式の一種とみなすことができます。また、 Encoding Standard文字符号化Unicode符号化または復号するアルゴリズムとして定義しています。

[38] そのような広義の Unicode符号化方式ではなく、専ら Unicode (または ISO/IEC 10646) の符号化文字集合符号化を目的とした符号化方式も数多く存在します。

ここに示したものの他に、それぞれのバリエーションも色々あります。

[40] しかしながら、過去のしがらみが無い場合には、専ら UTF-8 を用いるのが好ましいと現在では考えられるようになってきています。

[47] 符号化方式に関連して、次の概念があります。

符号位置

[41] Unicode には、 U+0000-U+10FFFF符号位置があります。

U+Unicode 符号位置16進数表記を表す記号です。

[42] しかしそのすべてに文字が割り当てられているわけではありません。 大部分にはまだ文字が割り当てられていません (将来の改訂で文字が割り当てられる可能性があります)。

[43] また次のような特別な符号位置もあります。

Unicode / UCS の部分集合

[45] 次の部分集合が定義されています。

文字集合

[46] Unicode には色々な文字が収録されています。

レンダリング

[50] 文字のレンダリング参照。

メモ

[52] かつては

When the world wants to talk, it speaks Unicode.

標語としていました。 Unicode ConsortiumWebサイトにも掲載されていました >>53 が、21世紀に入る前に削除されたようです。

[11] 私は (名無しさん 2004-03-30 05:45:12 +00:00)

[12]

The number of characters used for human communication desn't seem to be rising much, and there's plenty of space left in the current specification. IIRC Unicode still uses less than 200,000 of the million-odd possible code points.

Famous last words. From my handy dead-tree copy of Unicode 2.0, page 2-4, under the "Full Encoding heading":

There are over 18,000 unassigned code positions that are available for future allocation. This number far exceeds anticipated character encoding requirements for all world characters and symbols.

Cough, cough. It is nearly a universal truth that things tend to expand to fill the available space (and/or time). Why do you (apparently) think that Unicode is exempt?

I suppose you could argue that Unicode adds alphabets. But do you think Unicode still hasn't reached the 20% mark?

They add more than "alphabets", and that's part of the problem. Again quoting Unicode 2.0 (page 1-3 this time):

Graphologies unrelated to text, such as musical and dance notations, are outside the scope of the Unicode Standard.

Yeah, right. What did the Unicode Consortium add in 3.1? -- musical notation. So, as I said, I will not (anymore) be surprised when the Unicode Consortium adds (literally) chicken scratching, probably shortly after they add (if they haven't already) dance notation (human and otherwise), every possible organic chemistry carbon ring symbol, Feynman diagrams, CAD/CAM symbols, traffic sign symbols, trademarks, logos, etc. ad nauseum. N.B. no smiley. [that reminds me; they'll probably add all of the smiley variants too (if they haven't already)]

I was once a Unicode fan -- the above quotations from earlier Unicode Standards and "The Ten Unicode Design Principles" that were also in the earlier standards were sound principles. Unfortunately the Unicode Consortium appears to have abandoned many of those principles.

Re: UTF-8 versions (was: Re: RFC 2047 and gatewaying), Bruce Lilly, 2003年1月 (ietf-822 投稿)。

(名無しさん [sage])

[13] <mid:3E219D4B.9060608@Sonietta.blilly.com>

[16] Unicode 5.0 には、どうも文字列適合性に関する規定がないみたいです。 適合性の章 (3章) の中には、 D13 (非推奨文字の定義) に「非推奨の文字は使うべきではない」と書かれていたりして、 定義の中に適合性に関する規定とも読み取れるものが紛れ込んではいるのですが・・・。 3章は基本的には処理Unicode に対する適合性を規定するだけで、 文字列に関する適合性には触れていないみたいです。

[17] <http://www.unicode.org/errata/> 見ると前のバージョンでは正常だった例示字形があとのバージョンでエンバグしたってのがめっちゃいっぱいあるんだけど、なんでそんなことすんのか理解に苦しむなー。 同じフォントで印刷しろよー。

[18] Unicode Terminology: English - Japanese ( ( 版)) <http://www.unicode.org/terminology/term_en_ja.html>

[19] Unicode Utilities: UnicodeSet ( ( 版)) <http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B%3AtoNFKC%3D%2F%5C%25%2F%3A%5D&g=>

[51] The Unicode Archives () <http://unicode.org/pipermail/unicode/>

[54] Unicode 10.0.0 () <http://www.unicode.org/versions/Unicode10.0.0/>

[55] Unicode Mail List Archives () <http://unicode.org/mail-arch/>

[56] draft-faltstrom-unicode11-00 - IDNA2008 and Unicode 11.0.0 () <https://tools.ietf.org/html/draft-faltstrom-unicode11-00>