Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
文字コード 追加で教えて欲しいです
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30649#CommentId84836
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2021/11/13 17:07:01
> 各レコードとその開始位置を、以下のように読み取れます。
この中の "cmap", "hhea", "head", "hmtx", "maxp", "name", "OS/2", "post" は
どのフォントファイルにも含まれる必須レコードです。
で…今回欲しいのは、Naming table ということでしたよね。お待たせしました。
ようやく本命の TableDirectory[0].TableRecord["name"].nameRecord[*] な領域です。
ここに、フォントファミリ名や著作権表示が記録されています。
位置 : バイナリ : 説明
----------------- : ----------- : --------------------------------------
022F3B6A-022F3B6B : 00,23 : nameRecord.count = 0x23
022F3B6C-022F3B6D : 01,AA : storageOffset。文字列が 0x22F3D12 にあることを示す。
022F3B6E-022F3B6F : 00,01 : nameRecord[0].platformID = 1
022F3B70-022F3B71 : 00,00 : nameRecord[0].encodingID = 0
022F3B72-022F3B73 : 00,00 : nameRecord[0].languageID = 0
022F3B74-022F3B75 : 00,00 : nameRecord[0].nameID = 0
022F3B76-022F3B77 : 00,18 : nameRecord[0].length = 0x18
022F3B78-022F3B79 : 00,00 : nameRecord[0].stringOffset = 0
022F3B7A-022F3B7B : 00,01 : nameRecord[1].platformID = 1
022F3B7C-022F3B7D : 00,00 : nameRecord[1].encodingID = 0
022F3B7E-022F3B7F : 00,00 : nameRecord[1].languageID = 0
022F3B80-022F3B81 : 00,01 : nameRecord[1].nameID = 1
022F3B82-022F3B83 : 00,0C : nameRecord[1].length = 0x0C
022F3B84-022F3B85 : 00,18 : nameRecord[1].stringOffset = 0x18
022F3B86-022F3B87 : 00,01 : nameRecord[2].platformID = 1
022F3B88-022F3B89 : 00,00 : nameRecord[2].encodingID = 0
022F3B8A-022F3B8B : 00,00 : nameRecord[2].languageID = 0
022F3B8C-022F3B8D : 00,02 : nameRecord[2].nameID = 2
022F3B8E-022F3B8F : 00,07 : nameRecord[2].length = 0x07
022F3B90-022F3B91 : 00,24 : nameRecord[2].stringOffset = 0x24
以下略
今回用いた mingliub.ttc には 3 つのフォントが含まれており、
それぞれが 35 個の Naming table レコードを含んでいましたが
Gekka さんのコードではすべてを読み取ることができません。
platformID が 3 (Windows) のもの以外は無視する設計になっているためです。
すべてのデータを読み取りたい場合には、NameRecord.ReadData メソッドや
TTF.GetNames メソッド内の platformID 判定部を修正する必要があります。
platformID, encodingID, languageID の意味についてはこのあたり。
https://docs.microsoft.com/en-us/typography/opentype/spec/name#platform-encoding-and-language-ids
一つの nameID に対して、platformID, encodingID, languageID の異なる
複数の組み合わせが同時に収録されています。
今回のケースだと、nameID が 13, 14, 19 の物は、Windows / 米語 だけの収録でしたが、
nameID が 0~7 のレコードに関しては、Mac を含む下記 4 言語で収録されていました。
platformID : encodingID : languageID
------------- : --------------- : --------------------------------
1 (Macintosh) : 0 (Roman) : 0x0000 (English)
3 (Windows) : 1 (Unicode BMP) : 0x0404 (Chinese/Taiwan)
3 (Windows) : 1 (Unicode BMP) : 0x0409 (English/United States)
3 (Windows) : 1 (Unicode BMP) : 0x0409 (Chinese/Hong Kong S.A.R.)
nameID = 19 "SampleText" の内容は "𠀀𠀁𠀂𠀃𠀄\r𦬣𦬤𦬥𦬦𦬧\r𦩒𦩓𦩔𦩕𦩖\r𨣫𨣬𨣭𨣮𨣯" なのに
収録されている languageID が 英語(米語) だけだったのが、ちょっと違和感。