[13] 
[DFN[UCS-4]]
は、
[[ISO/IEC 10646]]
[[符号化文字集合]]の正規の表現方法でした。

[14] 
4オクテット = 32ビット (ただしその内1ビットは未使用) で1つの[[符号位置]]を表す[[固定長]]の[[文字コード]]でした。

* 当時の規定

[1] [[UCS-4]] は [[UCS]] の群・面・区・点各[[オクテット]]をそのまま並べた[[符号化方式]]。

[2] 正式には[[4オクテット正規形]] (4 octet canonical form) という。

[15] 初期 [[ISO/IEC 10646]] には[[符号位置]]の表現の方法として、正規の [[UCS-4]]
と[[基本多言語面]]のみ2バイトに短縮した [[UCS-2]] の2種類がありました。

[16] 
当時は [[UCS-2]] と [[Unicode]] が事実上同じものとされていました。
[[UCS-4]] は [[ISO/IEC 10646]] だけの独自仕様でした。

[17] 
その後 [[Unicode]] 側で [[UCS-2]] が拡張されて [[UTF-16]] となり、
[[UCS-4]] を [[UTF-16]] に合わせて縮小したものが [[UTF-32]] となりました。
更にその後、
[[ISO/IEC 10646]] に [[UTF-16]] と [[UTF-32]] が取り込まれ、
[[UCS-2]] と [[UCS-4]] は消失しました。


[4] [[10646]] が Unicode に乗っ取られた時に、ただ2つだけ残ったのが文字を4オクテットで表すという考え方 (すなわち UCS-4) と、「[[BMP]]」という名前であると言われています。

[18] 
前者もついに失われたのです。


[6]
>>5 UCS-4 は学習用の形式かよ。ひどい扱いだな。


[5] [[JIS X 0221]]‐1:2001 5. より UCS-4 関係を抜粋:

> この[[符号化文字集合]]の[[正規形式]]
(規格を理解するための形式) は、128個の3次元の[[群]]からなる一つの4次元[[符号化空間]]とみなすことができる。
:備考:
したがって、正規形式の[[最上位オクテット]]の[[ビット]] [N[8]]
は、適合する [[CCデータ要素]]中でそれが [N[0]]
に設定されている限り、[[装置]]内で内部処理に使うことができる。
> それぞれの群は、256個の2次元の[[面]]からなる。
各面は、256個の1次元の[[区]]からなり、
各区は256個の[[点]]からなる。この符号化空間の一つの点に一つの[[文字]]を割り当て、
符号化するか、又は点を未使用と宣言している。
>
正規形式では、4オクテットで各文字を表現し、
これらのオクテットは、それぞれ群、面、区及び点を指定する。
2オクテットでは世界中のすべての文字を収容できないこと及び32ビット表現が現在の処理系の体系になじむことから、
正規形式の4オクテット構成を採用した。
>
4オクテット正規形式は、4オクテットの符号化文字集合として使用でき、
この場合に、 UCS-4 と呼ぶ。

[7] [Q[6.2 文字の符号化]]より抜粋:
>
この符号化文字集合の正規形式では、符号化文字集合全体の中の各文字は、
4オクテットの列で表現する。この列の最上位オクテットは、
群オクテットとする。この列の最下位オクテットは、
点オクテットとする。したがって、この列は、
次のとおり表現できる。

[PRE[
最上位オクテット                           最下位オクテット
 群オクテット | 面オクテット | 区オクテット | 点オクテット
]PRE]

[8] [Q[6.3 オクテットの順序]] より:
> 文字を表現するオクテットの列及びその列の最上位端・最下位端は、 6.2 に示すとおりでなければならない。
オクテット列として[[直列化]]するときは、
上位のオクテットが下位のオクテットより先になければならない。
直列化しないときは、オクテットの順序は、
送受間の合意によって定めてよい [16.1 及び附属書 H (参考) 参照]。

[9]
>
:4オクテット正規形式:
この[[正規形式]]は、この規格群のすべての[[文字]]をそれぞれ 
4 オクテットで表現して使用できるようにする。
> 4 オクテット正規形式に適合した [[CCデータ要素]]中では、
すべての文字は、 6.2 の規定に従って、
[[群]]オクテット、[[面]]オクテット、[[区]]オクテット及び[[点]]オクテットからなる
4オクテットで表現しなければならない。
> 備考 4オクテット正規形式を使った[[符号化図形文字]]は、処理用として32ビットの[[整数型]]で実装してもよい。 (JIS X 0221‐1:2001 13.1)

* 最上位ビット

[SEE[ [[mohta bit]] ]]

* [CODE(charset)@en[ISO-10646-UCS-4]]

[10647] [[IANA charset]] [DFN[[CODE(charset)@en[[[ISO-10646-UCS-4]]]]]]
は、 [[UCS-4]] を表す名前です。

[10648] この名前は [[XML]] の[[符号化名]]としても [[XML]] 仕様書で特に言及されています。

;; [[XMLにおける文字コード]]も参照してください。

* エンディアン

[11] [[UCS-4]] は32ビット = 8[[バイト]]の[[文字コード]]であり、
[[大エンディアン]] ([DFN[[[UCS-4BE]]]]) と[[小エンディアン]]
([DFN[[[UCS-4LE]]]]) があります。またその他の変則的な[[エンディアン]]も存在するようです。

[19]
変則的[[エンディアン]]を表す名称として次のものが使われています。

- [1234] [[大エンディアン]]
- [1243]
- [1324]
- [1342]
- [1423]
- [1432]
- [2134]
- [2143] [DFN[[CODE[X-ISO-10646-UCS-4-2143]]]]
- [2314]
- [2341]
- [2413] [DFN[[CODE[X-ISO-10646-UCS-4-2413]]]]
- [2431]
- [3124]
- [3142]
- [3214]
- [3241]
- [3412] [DFN[[CODE[X-ISO-10646-UCS-4-3412]]]]
- [3421]
- [4123]
- [4132]
- [4213]
- [4231]
- [4312]
- [4321] [[小エンディアン]]

[21] 
第1バイトから第4バイトまでの配置順が名前に入っています。

[20] 
こうしたものは変換ソフトウェアなどに実装されていることがありますが、
実用されたことがあるのかは不明です。

[23] 
[TIME[平成23(2011)年][2011]]まで [[Gecko]] が 2143 と 3412 の[[復号]]に対応していました。
[[UTF-32]] 諸共削除されました。
[SRC[>>22]]

[24] 
削除前は [[Gecko]] に組み込まれた[[文字コード自動判定]]用[[ライブラリー]]
[[UniversalCharDet]]
でも実装されていました。
これを経由し、
各種[[プログラミング言語]]に移植された[[文字コード自動判定]]ライブラリー
([SEE[ [[UniversalCharDet]] ]]) が
[CODE[X-ISO-10646-UCS-4-3412]],
[CODE[X-ISO-10646-UCS-4-2143]]
を実装していることがあります。

[25] 
関連:
[CODE[X-ISO-10646-UCS-4-21431]],
[CODE[X-ISO-10646-UCS-4-34121]]

[REFS[

- [22] 
[CITE@en[Remove UTF-32 encoder and decoder. Bug 604317, r=emk · mozilla/gecko-dev@4587536 · GitHub]], [TIME[2025-05-17T09:27:10.000Z]] <https://github.com/mozilla/gecko-dev/commit/4587536cef9d04c442cfe534c41ccd35febc13f4>

]REFS]

[26] 
[CITE@EN[Extensible Markup Language (XML) 1.0 (Second Edition)]], [TIME[2018-10-09T13:32:08.000Z]], [TIME[2025-11-07T09:37:34.796Z]] <https://www.w3.org/TR/2000/REC-xml-20001006#sec-guessing-no-ext-info>


>
,[CODE[00 00 FE FF]]," 	UCS-4, big-endian machine (1234 order)"
,[CODE[FF FE 00 00]],"	UCS-4, little-endian machine (4321 order)"
,[CODE[00 00 FF FE]]," 	UCS-4, unusual octet order (2143)"
,[CODE[FE FF 00 00]]," 	UCS-4, unusual octet order (3412)"

>
,[CODE[00 00 00 3C]]
,[CODE[3C 00 00 00]]
,[CODE[00 00 3C 00]]
,[CODE[00 3C 00 00]]
> 	UCS-4 or other encoding with a 32-bit code unit and ASCII characters encoded as ASCII values, in respectively big-endian (1234), little-endian (4321) and two unusual byte orders (2143 and 3412). The encoding declaration must be read to determine which of UCS-4 or other supported 32-bit encodings applies.



* 他の符号化方式との関係

[3] [[UTF-32]] と実質的に同じですが、 [[UTF-32]] は [[U+10FFFF]] までのみで、
[[U-00110000]] [[以上]]は表現できません。 [[UCS-4]] は [[U-7FFFFFFF]]
まですべての[[符号位置]]を表現できます。

[10] [[ISO/IEC 10646]] が当初規定していた本来の [[UTF-8]] は、
[[UCS-4]] と同じ範囲のすべての[[符号位置]]を表現できました。
現在の [[UTF-8]] は [[UTF-32]] と同じ範囲に限定されています。

* 関連

[12] [[wchar_t]] で使われることがあります。

* メモ