制御文字

制御文字

[2] 文字のうち、制御機能を表すものを制御文字 (せいぎょもじ) (control characters) といいます。

仕様書

意味

[3] ISO文字コード体系では、 文字制御文字図形文字に分かれていました。

[6] 制御機能のうち、 1つの文字で表されるものが制御文字でした。 他に複数の文字で表わされるものもありました。 制御機能

[1]

制御文字 (control character)
一つのビット組合せだけで表現する制御機能
JIS X 0211‐1994 4.2.22, JIS X 0202:1998 4.9, JIS X 0201:1997 3.6

文脈

[20] 歴史的に様々な制御文字が定義され使われていました。現在使われているのは CR, LF, NULL くらいです。改行文字列末尾を表します。

[21] 個々の制御文字の用法は、それぞれの項を参照。

Unicode の制御文字

[60] 制御 (せいぎょ) (Control) は、 符号点型の1つです。 >>59 D10a General Category Cc と同義です >>61

[27] Unicode には、 U+0000 - U+001F, U+007F - U+009F の65個の制御文字符号位置があります。 >>26

[28] この符号位置は、 ISO/IEC 2022 の体系の C0制御文字 0/0 - 1/15DELETE 7/15C1制御文字 8/0 - 9/15 との互換性のために設定されたものとされます。 >>26

制御文字符号位置の意味

[29] The Unicode Standard は、 これらの制御文字符号位置は従前の意味 (semantics) そのままに使えるものであって、 それを使う応用依存で意味が決まります。 用法は上位層プロトコル依存であり、 The Unicode Standard適用範囲外です。 応用の特定の用法がない場合には、 ISO/IEC 6429:1992制御機能の意味に従って解釈できます。 上位層プロトコルの存在については情報交換の当事者間の合意によらなければ決められません。 >>26

[30] 一例として、 bidi の制御に ISO/IEC 6429 制御列を使うという選択は、 The Unicode Standard平文に対する上位層プロトコル層となります。 >>26

[31] 現在では bidi の制御は普通 Unicode のアルゴリズムか、それを活用した上位層プロトコルによって行うので、 ISO/IEC 6429 の手法を使うのは現実的な例ではありませんが、 この規定が書かれた当時はそうではなかったのでしょう。
[32] なぜ敢えて制御文字だけ Unicode は自身で規定せずに曖昧に従来手法に委ねているのか謎ですが、 Unicode が作られた当時はまだ各種の制御文字集合がよく使われていたのでしょうか。 1980年代くらいには ISO文字コードの体系では制御文字集合図形文字集合の分離が当然になっていました。 その延長線上の設計なのでしょうか。

[39] 一部の制御符号は、 平文でよく使われていて普及していて相互運用性に重要なため >>26 としてその性質が定義されています。 応用依存との説明とは裏腹に、 まったく自由に使えるということではないようです。

[46] ISO/IEC 10646 は、 同じような、 微妙に違う規定をしていました。 「JIS X 0211 又は同様な構造の制御機能の規格及びこれらから導出された規格に 従って符号化された制御機能」 が使えるとしていました >>48

[45] The Unicode Standard は、 10個の符号位置を、「The Unicode Standard で規定された制御符号」 として挙げています >>26

[42] C言語文字列の終端に使われる U+0000 NULLThe Unicode Standard で特に言及されていますが、 Unicode 的には適用範囲外とされており >>26、 特別な挙動は規定されていません。

[43] U+000A, U+000D, U+0085newline function を表すために使うことができますが、 具体的にどうするかは応用の裁量とされています。 >>26

[44] つまり Unicode 初期開発当時はもちろん現在に至ってもなお深刻な相互運用性の問題である改行コードの選択の問題にノータッチであろうとしています。 (正確には LSPS で更に問題を悪化させたのですが...)

符号位置との対応

[33] ISO/IEC 2022 の体系の制御機能は、 7ビット符号8ビット符号バイト列として定義されていました。 Unicode では、そのバイト列と数値的に等しい符号位置列によって表します。 >>26

[35] 制御文字 0/10 は、 Unicode文字 U+000A で表します。 この Unicode文字UTF-8 では 0x0AUTF-16BE では 0x00 0x0AUTF-32LE では 0x0A 0x00 0x00 0x00 で表します。

[47] ISO/IEC 10646 は、 JIS X 0211制御文字を、 「オクテット数 () と一致するように詰め込まなければな らない」 のであって、 「最下位オクテットは, JIS X 0211 で規定されたビット組合せとし, 上位のオクテット は, すべて 0 とする」 としていました >>48。 任意の制御文字を対象とする Unicode とは違って、 ISO/IEC 6429 に対象を限定しているところが違い、少し慎重です。

[34] ISO/IEC 2022 の体系のエスケープシーケンスを、 Unicode上位層プロトコルの一種として扱っています。 Unicode では、 エスケープシーケンスに相当する ASCII文字列と数値的に等しい符号位置列によって表します。 >>26

[36] ISO文字コードの世界の定義ではエスケープシーケンスを構成するバイトは、 あくまで制御機能の一部のビット組合せであって、 それに相当する ASCII文字ではありませんでした。 例えば 0x1B 0x41文字 ESCAPE終端バイト 4/1 であって、2バイト目は A ではありませんでした。 これを「ESC A」と呼ぶのは俗解か便宜的な表記に過ぎませんでした。

[37] UnicodeISO/IEC 2022 の構造に組み込まれていたエスケープシーケンスを、 意図的かどうか知りませんが、ASCII文字列に読み替えて扱うことで、 Unicode文字列の「上位層プロトコル」にすり替えています。 Unicode にとってエスケープシーケンスSGMLタグと同じようなものだということです。

[49] ISO/IEC 10646 は、 「符号化制御文字の後に 20〜7F の範囲にあるビット組合せが続く形のエスケープシーケンス, 制御シー ケンス及び制御列 (JIS X 0211 参照)」 の各ビット組合せも 00 の値をもつオクテットを詰め込むと規定していました。 >>48 Unicode の規定と同趣旨ながら、 さすがに ISO/IEC規格だけあって ISO/IEC 2022 の概念の扱いは Unicode よりはるかに正確です。

[50] Unicode は、 UnicodeU+0000 - U+007F制御機能の表現に使うことができるという立場を採っています。

[51] 一方で ISO/IEC 10646 は、 ISO/IEC 6429制御機能ビット組合せに特定の操作を行うことで、 UCS-2, UCS-4, 各種 UTF で利用できるという立て付けにしていて、 その操作をしたビット組合せISO/IEC 10646符号位置の列であるとは言っていません。 つまりビット組合せ 4/10x00000041 で表現されたとしても、 それが U+0041 (LATIN CAPITAL LETTER A) であるとは言っていません。

[38] なお Unicode のいう 「バイト列と数値的に等しい符号位置列」 や ISO/IEC 10646 のいう 0を「詰め込む」 とは同形復号操作に相当するものです。


[52] ISO/IEC 6429制御機能の多くは「文字」に関する動作を定義しています。 その解釈は 「応用が選択したこの規格の要素の種類」 に依存するのであって、 基底文字結合文字の一方でも両方でも、 合成列でもその他でも良い >>48 注記 のだといいます。 つまりほとんどすべて実装依存とされています。 ISO/IEC 10646 はこのように標準化を放棄していて、 Unicode上位層プロトコルの問題だと無視しています。 当の ISO/IEC 6429 にも規定はありません。誰も相互運用性には興味を持っていないようです。

[53] ISO/IEC 2022符号拡張制御機能 (指示シーケンス単独シフト固定シフト) は、 ISO/IEC 10646 で使ってはなりません。 >>48

[54] この規定は ISO/IEC 10646 にはありますが、 Unicode上位層プロトコルの問題だと無視しています。 エスケープシーケンスなどの制御機能が組み込まれた符号化文字集合を想定する ISO文字コードの体系からつまみ食いして上位層プロトコルに換骨した Unicode が何も規定しないのは無責任に感じますが...

[55] 指示シーケンスが禁止されているということは、 C0文字集合C1文字集合指示することもできないように思えますが、 指示シーケンスを利用できることは明示的に ISO/IEC 10646 で規定されています。さらに、 DOCS も規定されています。 すると禁止されているのは図形文字集合指示シーケンスのみと解するべきでしょうか。

[56] ISO/IEC 10646 で使うエスケープシーケンスについては、 ISO/IEC 10646におけるエスケープシーケンス参照。

制御文字集合

[7] 制御文字集合制御文字集合 (control character set) といいます。

[8] 制御文字集合にはC0文字集合C1文字集合があります。

[9] 制御文字集合に属さないで使われる制御文字として DELETE があります。

文字カテゴリー Controls (L)

[16] PRECIS文字カテゴリー Controls (L) は、制御文字をすべて含むものです >>15

[17] L: Control(cp) = True と定義されています >>15 が、 UnicodeControl という特性はなく、 何を指しているのか定かではありません。

制御文字の一覧

[11] ISO-IR には沢山の制御文字集合が登録されています。

[12] その殆どは既に使われなくなっています。
略号1略号2名前IR001IR007IR026IR036IR040IR048IR056IR067IR073IR074IR077IR104IR105IR106IR107IR124IR130IR132IR133IR134IR135IR136IR140ESC+UCS
ACKACKNOWLEDGE060606060606
APAACTIVE POSITION ADDRESS1F
APBACTIVE POSITION BACKWARD080808
APDACTIVE POSITION DOWN0A0A0A
APFACTIVE POSITION FORWARD090909
APHACTIVE POSITION HOME1E1E1E
APRACTIVE POSITION RETURN0D0D0D
APSACTIVE POSITION SET1C1C
APUACTIVE POSITION UP0B0B0B
ABKALPHA BLACK80
ANBALPHA BLUE84
ANCALPHA CYAN86
ANGALPHA GREEN82
ANMALPHA MAGENTA85
ANRALPHA RED81
ANWALPHA WHITE87
ANYALPHA YELLOW83
APCAPPLICATION PROGRAM COMMAND9F9F
COLBACKGROUND OR FOREGROUND COLOR90
BSBACKSPACE08080808080808
BELBELL070707070707070707
BBDBLACK BACKGROUND9C
BKBBLACK BACKGROUND90
BKFBLACK FOREGROUND8080
BSTABLINK START8E
BSTOBLINK STOP9E
BLBBLUE BACKGROUND94
BLFBLUE FOREGROUND8484
BPHBREAK PERMITTED HERE82
CANCANCEL CHARACTER181818181818181818
CCHCANCEL CHARACTER9494
CRCARRIAGE RETURN0D0D0D0D0D
HTSCHARACTER TABULATION SET88
HTJCHARACTER TABULATION WITH JUSTIFICATION89
CSCLEAR SCREEN0C0C0C
CUSCLOSE-UP FOR SORTING878787
CMDCODING METHOD DELIMITER64
CDYCONCEAL DISPLAY9898
CDCCONCEAL DISPLAY CONTROL92
CSICONTROL SEQUENCE INTRODUCER9B9B9B9B9B
COFCURSOR OFF8F149D
CONCURSOR ON8E11
CNBCYAN BACKGROUND96
CNFCYAN FOREGROUND8686
DLEDATA LINKING ESCAPE101010101010
DEFDDEFINE DRCS83
DEPMDEFINE MACRO80
DEFPDEFINE P-MACRO81
DEFXDEFINE TEXTURE84
DEFTDEFINE TRANSMIT-MACRO82
DELDELETE7F
DC4DEVICE CONTROL FOUR1414141414141414
DC1DEVICE CONTROL ONE11111111111111
DCSDEVICE CONTROL STRING9090
DC3DEVICE CONTROL THREE13131313131313
DC2DEVICE CONTROL TWO12121212121212
DMIDISABLE MANUAL INPUT60
DBHDOUBLE HEIGHT8D8D8D
DBSDOUBLE SIZE8F8F8F
DBWDOUBLE WIDTH8E8E
EDC4EDC FOUR94
EDC1EDC ONE91
EDC3EDC THREE93
EDC2EDC TWO92
EABEMBEDING ANNOTATION BEGINNING919191
EAEEMBEDING ANNOTATION END929292
EMIENABLE MANUAL INPUT62
ENDEND85
EBXEND BOX8A8A
EPAEND OF GUARDED AREA9797
ECDEND OF INSTRUCTION0B0B
EMEND OF MEDIUM19191919191919
ESAEND OF SELECTED AREA8787
ETXEND OF TEXT030303030303
EOTEND OF TRANSMISSION040404040404
ETBEND OF TRANSMISSION BLOCK171717171717
ENQENQUIRY050505050505
ESCESCAPE1B1B1B1B1B1B1B1B1B1B1B1B1B1B
FILFIL CHARACTER8A
FSFILE SEPARATOR1C1C1C
FLCFLASH CURSOR9B
FSHFLASHING8888
FLCFLASHING CONTROL91
FT1FONT 111
FT2FONT 212
FT3FONT 313
FFFORM FEED0C0C0C0C0C
FE0(BS)FORMAT EFFECTOR 0 (BACKSPACE)080808
FE1(HT)FORMAT EFFECTOR 1 (HORISONTAL TABULATION)090909
FE2(LF)FORMAT EFFECTOR 2 (LINE FEED)0A0A0A
FE3(VT)FORMAT EFFECTOR 3 (VERTICAL TABULATION)0B0B0B
FE4(FF)FORMAT EFFECTOR 4 (FORM FEED)0C0C0C
FE5(CR)FORMAT EFFECTOR 5 (CARRIAGE RETURN)0D0D0D
FOFORMATTING0909
GRBGREEN BACKGROUND92
GRFGREEN FOREGROUND8282
GSGROUP SEPARATOR1D1D1D1D
HMSHOLD MOSAIC9E
HTHORIZONTAL TABULATION09090909
HTSHORIZONTAL TABULATION SET8888
HTJHORIZONTAL TABULATION WITH JUSTIFICATION8989
ISIIDENTIFICATION NUMBER-IN-CONTEXT INDICATOR8C
INDINDEX84
INCINDICATOR FOR NON-STANDARD CHARACTER99
IS1INFORMATION SEPARATOR 11F0F
IS1(US)INFORMATION SEPARATOR 1 (UNIT SEPARATOR)1F1F0F
IS2INFORMATION SEPARATOR 21E0E
IS2(RS)INFORMATION SEPARATOR 2 (RECODE SEPARATOR)1E1E0E
IS3INFORMATION SEPARATOR 31D0D
IS3(GS)INFORMATION SEPARATOR 3 (GROUP SEPARATOR)1D1D0D
IS4INFORMATION SEPARATOR 41C0C
IS4(FS)INFORMATION SEPARATOR 4 (FILE SEPARATOR)1C0C
INTINTERRUPT61
ISBITEM SPECIFICATION BEGINNING93
ISEITEM SPECIFICATION END94
IPOIVERTED POLARITY9D
JTJUSTIFY1F1F
KWBKEYWORD BEGINNING9C9C9C
KWEKEYWORD END9D9D9D
KWKILL WORD1818
LFLINE FEED0A0A0A0A0A0A0A
VTSLINE TABULATION SET8A
LS1LOCKING SHIFT ONE0E0E0E0E
LS3LOCKING SHIFT THREE6F
LS3RLOCKING SHIFT THREE RIGHT7C
LS2LOCKING SHIFT TWO6E
LS2RLOCKING SHIFT TWO RIGHT7D
LS0LOCKING SHIFT ZERO0F0F0F0F
LRLOWER RAIL0F
MGFMAGENDA FOREGROUND8585
MGBMAGENTA BACKGROUND95
MSZMEDIUM SIZE89
METXMEDIUM TEXT8B
MWMESSAGE WAITING9595
MBKMOSAIC BKACK90
MSBMOSAIC BLUE94
MSCMOSAIC CYAN96
MSGMOSAIC GREN92
MSMMOSAIC MAGENTA95
MSRMOSAIC RED91
MSWMOSAIC WHITE97
MSYMOSAIC YELLOW93
NAKNEGATIVE ACKNOWLEDGE151515151515
NBDNEW BACKGROUND9D
NELNLNEXT LINE8585
NBHNO BREAK HERE83
NSBNON-SORTING CHARACTER(S) BEGINNING888888
NSENON-SORTING CHARACTER(S) END898989
NPONORMAL POLARITY9C
NSZNORMAL SIZE8A
NOTXNORMAL TEXT8C
NORVNORMAL VIDEO89
NSRNOW SELECTIVE RESET1F1F
NULNULL000000000000000000
OSCOPERATING SYSTEM COMMAND9D9D
OSCOPTIONAL SYLLABICATION CONTROL8D
PLDPARTIAL LINE DOWN8B8B8B8B
PLUPARTIAL LINE UP8C8C8C8C
PSBPERMUTATION STRING BEGINNING9E9E9E
PSEPERMUTATION STRING END9F9F9F
P-MACROPHOTO MACRO95
PMPRIVACY MESSAGE9E9E
PU1PRIVATE USE ONE9191
PU2PRIVATE USE TWO9292
PROPROTECT90
PRTPROTECTED9F
QCQUAD CENTURE1D1D
QLQUAD LEFT0D0D
QRQUAD RIGHT1E1E
RSRECODE SEPARATOR1E1E1E1E
RDBRED BACKGROUND91
RDFRED FOREGROUND8181
RMSRELEASE MOSAIC9F
REPREPEAT86
RPTREPEAT12
RPCREPEAT CONTROL98
REPEREPEAT TO END OF LINE87
RISRESET TO INITIAL STATE63
RIREVERSE INDEX8D8E
RIREVERSE LINE FEED8E
REVVREVERSE VIDEO88
SCOFSCROLL OFF98
SCONSCROLL ON97
SSBSECONDARY SORTING VALUE BEGINNING9797
SSESECONDARY SORTING VALUE END9898
SDSSERVICE DELIMITER CHARACTER1A
STSSET TRANSMIT STATE9393
SISHIFT IN0F0F0F0F0F0F0F
SOSHIFT OUT0E0E0E0E0E0E0E
SCISINGLE CHARACTER INTRODUCER9A
SS3SINGLE SHIFT THREE8F8F8F1D1D1D1D8F
SS2SINGLE SHIFT TWO1C8E8E8E19191919198E
NSZSINGLE SIZE8C8C
SZXSIZE CONTROL8B
SSZSMALL SIZE88
SMTXSMALL TEXT8A
SGCISINGLE GRAPHIC CHARACTER INTRODUCER
SIBSORTING INTERPOLATION BEGINNING9595
SIESORTING INTERPOLATION END9696
SBXSTART BOX8B8B
SPLSTART LINING99
STLSTART LINING9A9A
SPASTART OF GUARDED AREA9696
SOHSTART OF HEADING010101010101
SCDSTART OF INSTRUCTION0C0C
SSASTART OF SELECTED AREA8686
SOSSTART OF STRING98
STXSTART OF TEXT020202020202
STDSTEADY8989
STCSTEADY CURSOR9C
SCDSTOP CONCEAL9F
SPLSTOP LINING9999
STLSTOP LINING9A
STSTRING TERMINATOR9C9C
SUBSUBSTITUTE1A1A1A1A1A1A1A1A
SSSUPER SHIFT1C1C
SYNSYNCHRONOUS IDLE161616161616
TCITAG-IN-CONTEXT INDICATOR8B
TC1(SOH)TRANSMISSION CONTROL CHARACTER 1 (START OF HEADING)010101
TC10(ETB)TRANSMISSION CONTROL CHARACTER 10 (END OF TRANSMISSION BLOCK)1717
TC2(STX)TRANSMISSION CONTROL CHARACTER 2 (START OF TEXT)020202
TC3(ETX)TRANSMISSION CONTROL CHARACTER 3 (END OF TEXT)030303
TC4(EOT)TRANSMISSION CONTROL CHARACTER 4 (END OF TRANSMISSION)040404
TC5(ENQ)TRANSMISSION CONTROL CHARACTER 5 (ENQUIRY)050505
TC6(ACK)TRANSMISSION CONTROL CHARACTER 6 (ACKNOWLEDGE)060606
TC7(DLE)TRANSMISSION CONTROL CHARACTER 7 (DATA LINK ESCAPE)101010
TC8(NAK)TRANSMISSION CONTROL CHARACTER 8 (NOGATIVE ACKNOWLEDGE)151515
TC9(SYN)TRANSMISSION CONTROL CHARACTER 9 (SYNCHRONUS IDLE)161616
TRBTRANSPARENT BACKGROUND9E
USTAUNDERLINE START99
USTOUNDERLINE STOP9A
USUNIT SEPARATOR1F1F1F
UNPUNPROTECT9F
UNPUNPROTECTED9E
URUPPER RAIL0E
VTVERTICAL TABULATION0B0B0B0B
VTSVERTICAL TABULATION SET8A8A
WHBWHITE BACKGROUND97
WHFWHITE FOREGROUND8787
WWOFWORD WRAP OFF96
WWONWORD WRAP ON95
YLBYELLOW BACKGROUND93
YLFYELLOW FOREGROUND8383

[10] なお SPACE は現在では制御文字ではなく図形文字に分類されています。

関連

[58] 書式制御文字制御文字ではありません。

歴史

[4] Web Applications 1.0 r8173 Define 'control characters' formally. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8172&to=8173

[5] [css-text] Add form feed to list of exceptional characters. Need to g… · w3c/csswg-drafts@e691135 ( 版) https://github.com/w3c/csswg-drafts/commit/e691135763b4e4feb7f87cd9e68ade6390be90ba

[13] RFC 2486 - The Network Access Identifier ( 版) https://tools.ietf.org/html/rfc2486

Ctl = %x00-1F / %x7F

; the control characters (ASCII codes 0 through 31

; inclusive and 127)

[826] Unicode Character Encoding Stability Policy ( ( 版)) http://www.unicode.org/policies/stability_policy.html#Property_Value

[14] [css-text] Add form feed to list of exceptional characters. Need to g… · w3c/csswg-drafts@e691135 ( 版) https://github.com/w3c/csswg-drafts/commit/e691135763b4e4feb7f87cd9e68ade6390be90ba

[18] Define control and noncharacter (annevk著, ) https://github.com/whatwg/infra/commit/ad1b87aecce01759096fcdbf6acc2bd6096c3168

[19] Editorial: use noncharacter and control from Infra (annevk著, ) https://github.com/whatwg/html/commit/70925237a88d9802bfe7224fe9c78b146af615be