Word98/Win98 で MS明朝に追加された文字

この文章を書いている現在 Windows98 はまだ出荷されていませんが, Word98 は 1998年3月に出荷されました。 Word98 には Windows98 にも附属すると考えられている新しい MS明朝がオプションでついており, WideChar API を使って表示することによって 従来は用意されていなかった文字を表示することができます。 また, IME98 もこれらの新しい文字を入力できるように拡張されています。

簡単な表示プログラムを作って動かしてみました。 まず結果をお見せしましょう。

WIN98 MS MINCHO

では, 解説。 行の一番左にあるのが, 新しい MS 明朝 12pt のフォントを使い, TextOutW API で表示させた文字です。 次の UCS= が文字の UCS2 によるコード, CP932= が WideCharToMultiByte API を使って変換したコードページ932 の値(変換できなかったものは 3f と書いてある), NAME= というのが文字の名前です。

まず, WideCharToMultiByte API の返す結果自身は以前と変化ありません。 しかし, CP932 に変換できない文字でもグリフが割り当てられています。

まず 005C は相変わらず円記号を表示しますが, 00A5 でも円記号になります。 これは以前の Win95 でも同様だったのですが, それに加えて 00A2, 00A3, 00A6, 00AC の 「今まで全角バリアントしかなかった文字」 にもことごとくグリフが割り当てられたことが注目すべきでしょう。 しかもちゃんとみな全角バリアントの半分の幅で表示されています。

また, JIS X 0201 に厳格な人間は 「(CP932の)7Eh はオーバーライン(UCS:203e)のはず」 と言っていたのですが, この字のグリフもちゃんと入っています。 これも半角になっています。

JIS X 0208 の方では, やはり JIS と Windows で解釈の割れていたセント記号やポンド記号などに 全角でないグリフも割り当てられました。 しかし半角で表示するようです。 WAVE DASH もグリフが割り当てられていますが, なんと TILDE と上下逆になってます。 REVERSE SOLIDUS ですが, 相変わらず円記号になってしまっています。 DOUBLE VERTICAL LINE には何も割り当てられていません。

さて, WindowsNT で JIS X0201/0208 にない文字を Unicode と外字を使って処理する XKP 規格では, フォント搭載のレベル規定において, JIS X0221 (UCS) の附属書1 にある (1) から (7) までの日本語文字レパートリのうち, (5) を除く全部の部分集合を対象にしています。 新しい MS明朝では, 基本的にこの路線にそって文字が追加されたものとみなせますが, いろいろ変なところもある, というのが上の結果からも見て取れると思います。 また SHIFT_JIS との対応関係という点では従来とぜんぜん変化なく, JIS の規格票に書かれている対応関係とのずれは解消されていないことがわかります。

JIS X 0221 附属書1 は日本文字部分レパートリとして UCS BMP に対する 7つの部分集合を定義していますが, この部分集合と従来の JIS X 0201, 0208, 0212 との関係は大変複雑なものになっています。 表にして示すと下のようになります。

JIS X 0221
附属書1.
字数 JIS X 0201
ラテン
JIS X 0201
片仮名
JIS X 0208
非漢字
JIS X 0208
漢字
JIS X 0212
非漢字
JIS X 0212
漢字
JIS X 0221
新規追加
その他
(1)基本日本文字集合 6,884 94 0 432(*注1) 6,356(*注1) 0 0 1 (tilde) 1 (space)
(2)追加非漢字集合 1,909
(*注2)
0 0 0 0 260 0 1,649 0
(3)追加漢字集合 918 0 0 0 0 0 918 0 0
(4)補助漢字集合 4,883 0 0 0 0 0 4,883 0 0
(5)その他の漢字集合 8,745 0 0 0 0 0 0 8,745 0
(6)互換用全角英数字集合 94 0 0 89 0 0 0 5(*注3) 0
(7)互換用半角仮名集合 63 0 63 0 0 0 0 0 0
附属書1になし 8 0 0 2(¥, ̄) 0 6(*注4) 0 0 0
合計 23,504 94 63 523 6,356 266 5,801 10,400 1
*注1:
「仝」は漢字とみなす。 附属書1表1には「20DD COMBINING ENCLOSING CIRCLE」が見えるが, これは誤り。
*注2:
附属書1表2には 1,913 文字が載っており, XKP の仕様書も 1,913 文字としているが, 「007E TILDE, 2010 HYPHEN, 203E OVERLINE, 3000 IDEOGRAPHIC SPACE」 の 4字はすでに附属書1表1に重出しているので除いた。
*注3:
全角の QUOTATION MARK, APOSTROPHE, HYPHEN-MINUS, REVERSE-SOLIDUS, TILDE。
*注4:
BREVE, CARON, CEDILLA, DOT ABOVE, OGONEK, RING ABOVE。

全部あわせると, 非漢字が 2,602字(附属書1にない 8字を除くと 2,594字), 漢字が 20,902 字定義されています。

JIS X 0208, 0212 に含まれるにもかかわらず, 日本語文字レパートリに含まれない字が 8文字もあるのは驚きです。 (¥, ̄が含まれないというのはあくまで JIS X 0201 と 0208 を同時に使用し, かつ重複定義を許容する場合の話です。)

XKP では, この 7つの部分集合のうち, (5) を除く 6つの集合に対する適合性がある, としています。 XKP では, JIS X 0221 部分集合の (1)+(6)+(7) を「基本文字セット」, (2)+(3)+(4) を「拡張文字セット」と呼んでいます。 さらに, 従来から Windows の日本語文字集合にあった文字で, JIS X 0201/0208 にない文字を「互換文字セット」と呼んでいますが, この 3つの文字集合と上記の JIS X 0201/0208/0212/0221 との関係がまた複雑です。 また表にしてみます。 ただし「シフトJIS との変換」は問題にせず, 「適当なグリフが割り当てられているか」のみを考えることにします。

「Windows日本語」の区分については, 別に「JIS記号の UCS BMP へのマッピングの問題」という文を用意したので, そちらをご覧ください。 “[”と“]”でくくった数値は JIS/NEC/IBM 間で重複する文字を勘定に入れた場合の値です。 「IBM SBCS」と書いた 24文字は DOS/V 日本語コードページで 00-1F までに割り当てられていた罫線などのことです。 実は従来の MS明朝にもこれらのグリフは存在しましたが, WideChar でないと出力できないので, 世の中にはほとんど知られていませんでした。

JIS X 0221/0201/0208/0212 Windows日本語 Windows
なし
JIS部分 NEC拡張 IBM拡張 IBM
SBCS
XKP拡張
(1)基本日本文字集合 JIS X 0201 ラテン 94 93 0 0 0 1(OVERLINE) 0
JIS X 0208 非漢字 432424(*注1) 0[9](*注2) 0[1](*注3) 0 6(*注4) 2(*注5)
JIS X 0208 漢字 6,3566,356 0 0 0 0 0
tilde, space 2 2 0 0 0 0 0
(2)追加非漢字集合 JIS X 0212 非漢字 260 0 1(*注6) 0[1](*注6) 0 259 0
JIS X 0221 新規追加 1,6492(*注7) 73[83] 10[22] 17 1,547 0
(3)追加漢字集合 JIS X 0212 漢字 5,801 0 0[279] 279 0 5,522 0
(4)補助漢字集合
(6)互換用全角英数字集合 JIS X 0208 非漢字 89 89 0 0 0 0 0
JIS X 0221 新規追加 5 3(*注8)0[2](*注9)2(*注9) 0 0 0
(7)互換用半角仮名集合 JIS X 0201 仮名 63 63 0 0 0 0 0
(1)-(7)合計 非漢字 2,594 67674[95]12[26] 17 1,8132
漢字 12,1576,3560[279]279 0 5,5220
トータル 14,7517,03274[374]291[305]17 7,3352
その他 JIS X 0208 非漢字 2 2 0 0 0 0 0
JIS X 0212 非漢字 6 0 0 0 0 6 0
その他非漢字 124 3(*注10) 0[2](*注11)1[2](*注11) 7113(*注12) ---
その他漢字(CJK漢字) 47 0 0[47] 47 0 0 ---
その他漢字(互換領域)34 0 0[34] 34 0 0 ---
合計 非漢字 2,726 68174[97]13[28] 24 1,9322
漢字 12,2386,3560[360]360 0 5,5220
トータル 14,9647,03774[457]373[388]24 7,4542
*注1:
Windowsと JISの解釈の違いにより, REVERSE SOLIDUS, CENT SIGN, POUND SIGN, NOT SIGN, EM DASH, MINUS SIGN, WAVE DASH, DOUBLE VERTICAL LINE の 8文字が存在しない。
*注2:
SQUARE ROOT, ANGLE, INTERSECTION, UNION, INTEGRAL, BECAUSE, APPROXIMATELY EQUAL TO OR THE IMAGE OF, IDENTICAL TO, UP TACK の 9字。
*注3:
BECAUSE のみ。
*注4:
WAVE DASH, MINUS SIGN, CENT SIGN, POUND SIGN, NOT SIGN, EM DASH の 6字。 WAVE DASH のグリフには問題がある。 他の 5字は半角で表示する。
*注5:
REVERSE SOLIDUS (円記号を表示してしまう), DOUBLE VERTICAL LINE
*注6:
NUMERO SIGN のみ。
*注7:
Windows と JIS の解釈の違いにより HORIZONTAL BAR, PARALLEL TO が存在する
*注8:
Windows と JIS の解釈の違いにより, 全角の REVERSE SOLIDUS, TILDE, HYPHEN-MINUS が存在する
*注9:
全角の QUOTATION MARK と APOSTROPHE。
*注10:
Windows と JIS の解釈の違いにより, 全角の CENT SIGN, POUND SIGN, NOT SIGN が存在する。
*注11:
全角の NOT SIGN, BROKEN BAR。
*注12:
0192, 01CD-01DC, 01F5, 01FA-01FF, 02C6, 02C9, 02DC, 1E80-1E85, 1EF2, 1EF3, 2302, 2310, 2320, 2321, 3030, 3031, 3032, 3037, 32C0-32CB, 3358-3370, 33E0-33FE, FB01, FB02。

2022 BULLET および 2027 HYPHENATION POINT は単なる点のようなものが表示されるのですが, もともとの JIS X 0221 の規格でもこの 2字は点みたいな形をしているので, いちおう実装されているものとみなしました。 2000-200F, 2028-202E は不可視なので実装されているのかどうか不明ですが, これもいちおう実装されているものとみなしました。

どの字が全角でどの字が半角になっているかも調べたかったのですが, 根性が切れたのでまた次回ということにします。


コンピュータ関係に戻る