Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
文字コード 追加で教えて欲しいです
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30649#CommentId84730
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2021/10/6 10:46:33
> コードポイント?が2つ?の(あ)異体字と(い)サロゲートペア異体字のフォント内のグリフ?の確認方法を
> 教えて頂きたかったでした。
(あ)異体字というのは SVS のことで、
(い)サロゲートペア異体字とは IVS のことでしょうか?
※ SVS はサロゲートペアを必要とせず、基本多言語面のみで表せるので。
たとえば「車」の異体字割り当てを見ると、下記の 3 つがあります。
3は UTF-16 だとサロゲートペアが必要ですが、1と2はサロゲートペアを必要としません。
① [U+8ECA] "基底文字" (CJK UNIFIED IDEOGRAPH-8ECA)
② [U+8ECA][U+FE00] "標準異体字" (CJK COMPATIBILITY IDEOGRAPH-F902)
③ [U+8ECA][U+E0100] "Adobe-Japan1" (CID+2306)
この基底文字は基本多言語面(BMP)にあります。
2の異体字セレクタは IVS の [VS1]、3の異体字セレクタは IVS の [VS17] です。
>IPAmj明朝で𩸽は、コードポイント171581ですが、取得できるグリフ番号は、55556ですが、
「文字コード」というよりは、「フォント」の話になりますね。
グリフIDへの変換には、cmap (≒CMap) サブテーブルが使われます。
> CharacterToGlyphMapで取得されるグリフのidで表示される文字が、
> 異体字なら、1個なのか、2個以上なのかを確認したかった、ものです。
Unicode 第0面 (BMP) の U+0000~U+FFFF は Format 4 を参照します。
Unicode 第1面~第16面の U+10000~U+10FFFF は、Format 12 を参照します。
異体字セレクタ(UVS) は Format 14 を参照します。
Format 0: Byte encoding table
Format 2: High-byte mapping through table
Format 4: Segment mapping to delta values
Format 6: Trimmed table mapping
Format 8: mixed 16-bit and 32-bit coverage
Format 10: Trimmed array
Format 12: Segmented coverage
Format 13: Many-to-one range mappings
Format 14: Unicode Variation Sequences
https://aznote.jakou.com/prog/opentype/08_cmap.html
https://www.usefullcode.net/2016/04/11_cmap_from_font_file.html
https://docs.microsoft.com/ja-jp/typography/opentype/spec/cmap?WT.mc_id=DT-MVP-8907#format-14-unicode-variation-sequences
https://developer.apple.com/fonts/TrueType-Reference-Manual/
上記 Azel さんのサイトにも書かれていますが、cmap Format 14 は、
platformID = 0(Unicode) かつ encodingID = 5(Unicode Variation Sequences) が必須です。
UVS マップでは、Unicode値として uint32 あるいは uint24 を扱います。
.NET の Char 型は 16 ビットなので、U+10000 以降の文字を扱う場合は、
検索前に Unicode コードポイントに変換しておいてください。
以前 Gekka さんが、フォントファイルの cmap Format 14 から
異体字セレクタを列挙するコードを MSDN Forum に投稿されていました。
検索条件が Char になっているので、BMP 範囲の基底文字しか拾えませんが
考え方の参考になるかと思います。
https://social.msdn.microsoft.com/Forums/ja-JP/24b83554-2b0b-43ea-a375-39e7b989a571/30064203072338312398199683523912398209861237526041124342594512?forum=vbgeneralja
> 𩸽は、29E3D,E0100~29E3D,E0104
CJK統合漢字拡張漢字「𩸽」の基底文字は [U+29E3D] ですね。(CJK UNIFIED IDEOGRAPH-29E3D)
Unicode 第2面(SIP; 追加漢字面)なので、UTF-16 ではサロゲートペアの範囲。
対応フォントまでは調べていないですが、IVS(異体字シーケンス)の登録はこんな感じでした。
𩸽 [U+29E3D] → 𩸽
𩸽 [U+29E3D], VS17 [U+E0100] → 𩸽󠄀 (Adobe-Japan1: CID+20315)
𩸽 [U+29E3D], VS18 [U+E0101] → 𩸽󠄁 (Adobe-Japan1: CID+15437)
𩸽 [U+29E3D], VS19 [U+E0102] → 𩸽󠄂 (文字情報基盤: MJ055217 ; 汎用電子: JD9344 ; 住基ネット統一文字: J+ABBC)
𩸽 [U+29E3D], VS20 [U+E0103] → 𩸽󠄃 (文字情報基盤: MJ055216 ; 汎用電子: KS523690; 戸籍統一文字: 523690)
𩸽 [U+29E3D], VS21 [U+E0104] → 𩸽󠄄 (文字情報基盤: MJ055218 ; 住基ネット統一文字: J+C01A)