"IPA P明朝"と"IPA Pゴシック"のフォント名の文字化け対策

目次

公開日 2026-02-23 更新日 -

"IPA P明朝"も文字化け

フォント名を見るのはGIMPが多いので、YOzフォント以外は化けていないと思っていた。でもCalcのフォント選択では化けるものがあった。

䥐䅐䵩湣桯とはなんだっけと調べると"IPA P明朝"だった。3つめのフォント名が化けているのはすでに把握していたが、表に出てこないと思っていた。実際、GIMPとフォントビュアでは正しい文字列である"IPA P明朝"で選択肢に出てくる。Calcでは䥐䅐䵩湣桯で出てきて、"IPA P明朝"では現れない。

adachi@banach:~$ fc-list -vb 䥐䅐䵩湣桯
Pattern has 26 elts (size 32)
	family: "IPA P明朝"(s) "IPAPMincho"(s) "䥐䅐䵩湣桯"(s)
	familylang: "ja"(s) "en"(s) "ja"(s)
	style: "Regular"(s)
	stylelang: "en"(s)
	fullname: "IPA P明朝"(s) "IPAPMincho"(s) "䥐䅐䵩湣桯"(s)
	fullnamelang: "ja"(s) "en"(s) "ja"(s)
	slant: 0(i)(s)
	weight: 80(f)(s)
	width: 100(f)(s)
	foundry: "IPA "(s)
	file: "/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf"(s)
	index: 0(i)(s)
	outline: True(s)
	scalable: True(s)
	fontversion: 198574(i)(s)
	capability: "otlayout:hani otlayout:kana otlayout:latn"(s)
	fontformat: "TrueType"(s)
	decorative: False(s)
	postscriptname: "IPAPMincho"(s)

これもどうしようかと、YOzの時のようにまずは調べてみる。

adachi@banach:~$ file /usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf
/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf: TrueType Font data, 18 tables, 1st "GDEF", name offset 0x781ea8

自作のpythonプログラムを使ってnameオフセットテーブルを調べる。

adachi@banach:~$ ./binaryOffset2.py /usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf 0x781ea8

"IPA P明朝"のnameオフセットテーブル

filename='/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf'
offset=0x781ea8
formatOfNameRecord=0x0000
numOfNameRecord=0x0024
stringOffsetOfNameRecord=0x01b6

多分問題になる、mac-jap-ja-01 と win-uni-ja-01 の length, offset にをつけておきました。YOzの経験では近くの02,04も書き換えたくなるかもしれません。

nameオフセットテーブル(変更前)
platformIDencodingIDlanguageID nameIDlengthoffsetoffset.offset
00 00 01 mac 00 00 rom 00 00 en 00 00 00 a6 00 00 0x781eb9
01 00 01 mac 00 00 rom 00 00 en 00 01 00 0a 00 a6 0x781ec5
02 00 01 mac 00 00 rom 00 00 en 00 02 00 07 00 b0 0x781ed1
03 00 01 mac 00 00 rom 00 00 en 00 03 00 19 00 b7 0x781edd
04 00 01 mac 00 00 rom 00 00 en 00 04 00 0a 00 d0 0x781ee9
05 00 01 mac 00 00 rom 00 00 en 00 05 00 0e 00 da 0x781ef5
06 00 01 mac 00 00 rom 00 00 en 00 06 00 0a 00 e8 0x781f01
07 00 01 mac 00 00 rom 00 00 en 00 0d 00 31 00 f2 0x781f0d
08 00 01 mac 00 00 rom 00 00 en 00 0e 00 31 01 23 0x781f19
09 00 01 mac 00 01 jap 00 0b ja 00 00 00 a6 01 54 0x781f25
0a 00 01 mac 00 01 jap 00 0b ja 00 01 00 0a 01 fa 0x781f31
0b 00 01 mac 00 01 jap 00 0b ja 00 02 00 07 02 04 0x781f3d
0c 00 01 mac 00 01 jap 00 0b ja 00 03 00 19 02 0b 0x781f49
0d 00 01 mac 00 01 jap 00 0b ja 00 04 00 0a 02 24 0x781f55
0e 00 01 mac 00 01 jap 00 0b ja 00 05 00 0e 02 2e 0x781f61
0f 00 01 mac 00 01 jap 00 0b ja 00 06 00 0a 02 3c 0x781f6d
10 00 01 mac 00 01 jap 00 0b ja 00 0d 00 31 02 46 0x781f79
11 00 01 mac 00 01 jap 00 0b ja 00 0e 00 31 02 77 0x781f85
12 00 03 win 00 01 uni 04 09 en 00 00 01 4c 02 a8 0x781f91
13 00 03 win 00 01 uni 04 09 en 00 01 00 14 03 f4 0x781f9d
14 00 03 win 00 01 uni 04 09 en 00 02 00 0e 04 08 0x781fa9
15 00 03 win 00 01 uni 04 09 en 00 03 00 32 04 16 0x781fb5
16 00 03 win 00 01 uni 04 09 en 00 04 00 14 04 48 0x781fc1
17 00 03 win 00 01 uni 04 09 en 00 05 00 1c 04 5c 0x781fcd
18 00 03 win 00 01 uni 04 09 en 00 06 00 14 04 78 0x781fd9
19 00 03 win 00 01 uni 04 09 en 00 0d 00 62 04 8c 0x781fe5
1a 00 03 win 00 01 uni 04 09 en 00 0e 00 62 04 ee 0x781ff1
1b 00 03 win 00 01 uni 04 11 ja 00 00 01 4c 05 50 0x781ffd
1c 00 03 win 00 01 uni 04 11 ja 00 01 00 0e 06 9c 0x782009
1d 00 03 win 00 01 uni 04 11 ja 00 02 00 0e 06 aa 0x782015
1e 00 03 win 00 01 uni 04 11 ja 00 03 00 32 06 b8 0x782021
1f 00 03 win 00 01 uni 04 11 ja 00 04 00 0e 06 ea 0x78202d
20 00 03 win 00 01 uni 04 11 ja 00 05 00 1c 06 f8 0x782039
21 00 03 win 00 01 uni 04 11 ja 00 06 00 14 07 14 0x782045
22 00 03 win 00 01 uni 04 11 ja 00 0d 00 62 07 28 0x782051
23 00 03 win 00 01 uni 04 11 ja 00 0e 00 62 07 8a 0x78205d

実は"IPA P明朝"は4つ前のページ、「フォント名の文字化けの原因をさぐる」ですでに調べてあって、3つ前のページ、「Debian13で起こるフォント名の文字化けの原因はfontconfig」で核心部分を抜き出しています。

offset.offsetが追加されているので、ここまでは再掲しましたが、以下は省きます。

結局、mac_jpのバイト列をshift_JISでデコードして、mac_en の IPAPMincho と同じになるはずが、utf_16_be でデコードするので、䥐䅐䵩湣桯になって日本語名として登録されるということでした。win_jaでは utf_16_be でデコードして"IPA P明朝"になるので、日本語名が2つになるというわけです。

この場合、YOzでやったように mac_ja に win_ja用のバイト列を割当ると、現状の間違ったfontconfigでは"IPA P明朝"とデコードされて win_ja用の文字列と同じになりますが、正しくshift_jisでデコードされるように修正されると間違いなくデコードに失敗します。その場合、多分無視されて実害はないと思うのですが、01でないnameIDを与えておくというのも一つの手です。

使えそうなのは

nameID10進内容
88製造者
99デザイナーの名前
a10説明
b11ベンダーの URL
c12デザイナーの URL
1319サンプルテキスト

詳しくは、5つ前のページ、「フォント名の文字化け-フォント側に問題がないことを確認」にあります。

この中でフォントビュアーなどで表示できるものがあれば面白いかなと、調べてみる。これが大きな寄り道になってしまいました。

フォントビュアーで寄り道

フォントビュアーというのは、カタカナでは違和感があります。org.gnome.font-viewer というソフトウェアで、Debian13では「フォント」という名前で表示されます。"Fonts"の訳語です。「Word」がワードプロセッサの名前としてわかりにくいのと同様な分かりにくさを持っています。

使いやすくもなく、欲しい情報も不足するソフトですが、標準で入っているのでこんな時には使います。

アイコンは、紫色の本に色々なaが4つ書かれている

画面は3つあって、起動するとフォント一覧。"IPA P明朝"は化けていません。ちなみにPでない、IPA明朝とIPAゴシックが2つずつあるのは、シンボリックリンクがあって同じものを指しているのがあるためです。なぜこうなったかわかりません。それはともかく、"IPA P明朝"をクリックすると、

Aaの下にフォント名

"IPA P明朝"の詳細になります。このへんにサンプルテキストが関係するかはまだわかりません。右上の[info]で、画面が替わります。

いろはにほへと

著作権とかライセンスはここに出ますが、説明や製造者なんかも指定すれば出るのでしょうか。

'IPA PMincho'の情報

右上にある[install]というのが前から気になっていて、[インストール済み]と出るフォントもあります。"IPA P明朝"は、使えているけどまだインストールしていないということなのでしょうか。

今回ついに押してしまいました。ちょっとの間[インストール中]となって戻ります。戻った先はやはり[install]です。特になにも効果がないように見えます。スクリーンショットをとるために何回か押してしまいましたがおなじです。

インストール中と表示される

[インストール済み]にもならないし、[uninstall]も出てきません。

installされていた

fc-listして、'IPA P明朝'が入っているものを選択すると、インストールされていたことが判明します。

しかも3回。.local/share/fonts/に先頭に1,2の数字が入って複数インストールされています。

元のものと合わせて全部で4つです。

adachi@banach:~$ fc-list 'IPA P明朝'
/home/adachi/.local/share/fonts/2ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular
/home/adachi/.local/share/fonts/1ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular
/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular
/home/adachi/.local/share/fonts/ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular

ちなみに、Pでない"IPA明朝"の方は、

adachi@banach:~$ fc-list 'IPA明朝'
/usr/share/fonts/opentype/ipafont-mincho/ipam.ttf: IPA明朝,IPAMincho:style=Regular
/usr/share/fonts/truetype/fonts-japanese-mincho.ttf: IPA明朝,IPAMincho:style=Regular

ですが、これは

adachi@banach:~$ ll /usr/share/fonts/opentype/ipafont-mincho/ipam.ttf
-rw-r--r-- 1 root root 8046712  4月 12  2011 /usr/share/fonts/opentype/ipafont-mincho/ipam.ttf
adachi@banach:~$ ll /usr/share/fonts/truetype/fonts-japanese-mincho.ttf
lrwxrwxrwx 1 root root 43  4月 12  2011 /usr/share/fonts/truetype/fonts-japanese-mincho.ttf -> /etc/alternatives/fonts-japanese-mincho.ttf

ということなので、片方がシンボリックリンクで本体はひとつです。

.local/に入っている方は、本当にコピーになっています。次の表示で12ipamp.ttfが増えましたが、2ipamp.ttfから[install]すると、それにさらに1が付くということを確認したものです。

adachi@banach:~$ ll ~/.local/share/fonts/
合計 31440
-rw-r--r-- 1 adachi adachi 8046048  4月 12  2011 12ipamp.ttf
-rw-r--r-- 1 adachi adachi 8046048  4月 12  2011 1ipamp.ttf
-rw-r--r-- 1 adachi adachi 8046048  4月 12  2011 2ipamp.ttf
-rw-r--r-- 1 adachi adachi 8046048  4月 12  2011 ipamp.ttf

アンインストールは、これを削除すればいいのでしょうが、GUIで増やしたものはGUIでもとに戻せるようになっていてほしいものです。

'IPA P明朝'の書き換え

フォントのインストールを調べている中で、システムレベル(全ユーザーで使用する階層)でインストールする方法と、ユーザーレベル(インストールしたユーザーのみ)でインストールする方法があるのを知ってはいましたが、一人で専有しているPCなのでユーザーレベルで入れようとしたことはありませんでした。でも入ってしまったので、これを書き換えて使えるならこの方が気楽かもしれません。fontconfigが修正されるまでユーザーレベルのフォントが使われ、修正後フォント名が正しく取得できるようになったら、システムレベルに入れたフォントが使われるように戻るという設定も可能かもしれません。

とりあえず、12ipamp.ttfを書き換えてみて、その効果が反映されるか試してまることにします。

2バイトずつの16進ダンプ

どの様に書き換えたか確認します。

adachi@banach:~$ ./binaryOffset2.py ~/.local/share/fonts/12ipamp.ttf 0x781ea8

12ipamp.ttfのnameオフセットテーブル

filename='/home/adachi/.local/share/fonts/12ipamp.ttf'
offset=0x781ea8
formatOfNameRecord=0x0000
numOfNameRecord=0x0024
stringOffsetOfNameRecord=0x01b6
nameオフセットテーブル(変更後)
platformIDencodingIDlanguageID nameIDlengthoffsetoffset.offset
00 00 01 mac 00 00 rom 00 00 en 00 00 00 a6 00 00 0x781eb9
01 00 01 mac 00 00 rom 00 00 en 00 01 00 0a 00 a6 0x781ec5
02 00 01 mac 00 00 rom 00 00 en 00 02 00 07 00 b0 0x781ed1
03 00 01 mac 00 00 rom 00 00 en 00 03 00 19 00 b7 0x781edd
04 00 01 mac 00 00 rom 00 00 en 00 04 00 0a 00 d0 0x781ee9
05 00 01 mac 00 00 rom 00 00 en 00 05 00 0e 00 da 0x781ef5
06 00 01 mac 00 00 rom 00 00 en 00 06 00 0a 00 e8 0x781f01
07 00 01 mac 00 00 rom 00 00 en 00 0d 00 31 00 f2 0x781f0d
08 00 01 mac 00 00 rom 00 00 en 00 0e 00 31 01 23 0x781f19
09 00 01 mac 00 01 jap 00 0b ja 00 00 00 a6 01 54 0x781f25
0a 00 01 mac 00 01 jap 00 0b ja 00 13 00 0a 01 fa 0x781f31
0b 00 01 mac 00 01 jap 00 0b ja 00 02 00 07 02 04 0x781f3d
0c 00 01 mac 00 01 jap 00 0b ja 00 03 00 19 02 0b 0x781f49
0d 00 01 mac 00 01 jap 00 0b ja 00 04 00 0a 02 24 0x781f55
0e 00 01 mac 00 01 jap 00 0b ja 00 05 00 0e 02 2e 0x781f61
0f 00 01 mac 00 01 jap 00 0b ja 00 06 00 0a 02 3c 0x781f6d
10 00 01 mac 00 01 jap 00 0b ja 00 0d 00 31 02 46 0x781f79
11 00 01 mac 00 01 jap 00 0b ja 00 0e 00 31 02 77 0x781f85
12 00 03 win 00 01 uni 04 09 en 00 00 01 4c 02 a8 0x781f91
13 00 03 win 00 01 uni 04 09 en 00 01 00 14 03 f4 0x781f9d
14 00 03 win 00 01 uni 04 09 en 00 02 00 0e 04 08 0x781fa9
15 00 03 win 00 01 uni 04 09 en 00 03 00 32 04 16 0x781fb5
16 00 03 win 00 01 uni 04 09 en 00 04 00 14 04 48 0x781fc1
17 00 03 win 00 01 uni 04 09 en 00 05 00 1c 04 5c 0x781fcd
18 00 03 win 00 01 uni 04 09 en 00 06 00 14 04 78 0x781fd9
19 00 03 win 00 01 uni 04 09 en 00 0d 00 62 04 8c 0x781fe5
1a 00 03 win 00 01 uni 04 09 en 00 0e 00 62 04 ee 0x781ff1
1b 00 03 win 00 01 uni 04 11 ja 00 00 01 4c 05 50 0x781ffd
1c 00 03 win 00 01 uni 04 11 ja 00 01 00 0e 06 9c 0x782009
1d 00 03 win 00 01 uni 04 11 ja 00 02 00 0e 06 aa 0x782015
1e 00 03 win 00 01 uni 04 11 ja 00 03 00 32 06 b8 0x782021
1f 00 03 win 00 01 uni 04 11 ja 00 04 00 0e 06 ea 0x78202d
20 00 03 win 00 01 uni 04 11 ja 00 05 00 1c 06 f8 0x782039
21 00 03 win 00 01 uni 04 11 ja 00 06 00 14 07 14 0x782045
22 00 03 win 00 01 uni 04 11 ja 00 0d 00 62 07 28 0x782051
23 00 03 win 00 01 uni 04 11 ja 00 0e 00 62 07 8a 0x78205d

上の表で書き換えは1バイトだけです。mac_jaのnameID=01を0x13にしました。これは「family-name」だったところを、「サンプルテキスト」にしたものです。length,offsetのところは着色していますが変えていません。結果としてmac_jaのfamily-nameは書いていないということになります。

加えてwin_jaのfamil-ynameの文字列のスペース(0020)にを小文字のC(0063)に変えてみました。うまくいって整理がついたらもとに戻すつもりです。

次の表が 12ipamp.ttf に加えた2バイトの変更をすべて表しています。

文字列へのオフセット計算、バイト列とデコード例 nameID=01のみ抜粋 (変更後)
offsetlength開始位置呼出元plat_lang呼出元nameID バイト列(デコード前の文字列)utf_16_beshift_jis
00a6100x782104mac_en01 49 50 41 50 4d 69 6e 63 68 6f 䥐䅐䵩湣桯IPAPMincho
01fa100x782258mac_ja19 49 50 41 50 4d 69 6e 63 68 6f 䥐䅐䵩湣桯IPAPMincho
03f4200x782452win_en01 00 49 00 50 00 41 00 50 00 4d 00 69 00 6e 00 63 00 68 00 6f IPAPMinchoIPAPMincho
069c140x7826fawin_ja01 00 49 00 50 00 41 00 63 00 50 66 0e 67 1d IPAcP明朝IPAcPfg

'IPA P明朝'と'IPAcP明朝'=12ipamp.ttfの確認

'IPA P明朝'は4つです。

adachi@banach:~$ fc-list 'IPA P明朝'
/home/adachi/.local/share/fonts/2ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular
/home/adachi/.local/share/fonts/1ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular
/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular
/home/adachi/.local/share/fonts/ipamp.ttf: IPA P明朝,IPAPMincho,䥐䅐䵩湣桯:style=Regular

'IPAcP明朝'がひとつあります。

adachi@banach:~$ fc-list 'IPAcP明朝'
/home/adachi/.local/share/fonts/12ipamp.ttf: IPAcP明朝,IPAPMincho:style=Regular

'IPAcP明朝'には"䥐䅐䵩湣桯"がありません。(nameID=04には残っています)

adachi@banach:~$ fc-list -vb 'IPAcP明朝'
Pattern has 26 elts (size 32)
	family: "IPAcP明朝"(s) "IPAPMincho"(s)
	familylang: "ja"(s) "en"(s)
	style: "Regular"(s)
	stylelang: "en"(s)
	fullname: "IPA P明朝"(s) "IPAPMincho"(s) "䥐䅐䵩湣桯"(s)
	fullnamelang: "ja"(s) "en"(s) "ja"(s)
	slant: 0(i)(s)
	weight: 80(f)(s)
	width: 100(f)(s)
	foundry: "IPA "(s)
	file: "/home/adachi/.local/share/fonts/12ipamp.ttf"(s)
   以下略

IPA Pゴシック

"IPA Pゴシック"は、フォント(org.gnome.font-viewer)でひとつしかない。

フォントで一度だけinstallする。

これで、'IPA Pゴシック'の名前をもつフォントが2つになる

adachi@banach:~$ fc-list 'IPA Pゴシック'
/home/adachi/.local/share/fonts/ipagp.ttf: IPA Pゴシック,IPAPGothic,䥐䅐䝯瑨楣:style=Regular
/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf: IPA Pゴシック,IPAPGothic,䥐䅐䝯瑨楣:style=Regular

~/.local/share/fonts/にコピーされている。(ファイル名はipagp.ttf)

adachi@banach:~$ ll ~/.local/share/fonts/
合計 37532
-rw-r--r-- 1 adachi adachi 8046048  2月 24 18:10 12ipamp.ttf
-rw-r--r-- 1 adachi adachi 8046048  4月 12  2011 1ipamp.ttf
-rw-r--r-- 1 adachi adachi 8046048  4月 12  2011 2ipamp.ttf
-rw-r--r-- 1 adachi adachi 6235712  4月 12  2011 ipagp.ttf
-rw-r--r-- 1 adachi adachi 8046048  4月 12  2011 ipamp.ttf

fileコマンドでoffsetを調べて、nameオフセットテーブルを知る。(hdコマンドなどを使っての手作業でもできないことはない)

adachi@banach:~$ file ~/.local/share/fonts/ipagp.ttf 
/home/adachi/.local/share/fonts/ipagp.ttf: TrueType Font data, 18 tables, 1st "GDEF", name offset 0x5c7f00
adachi@banach:~$ ./binaryOffset2.py ~/.local/share/fonts/ipagp.ttf 0x5c7f00

'IPA Pゴシック'のnameオフセットテーブル

filename='/home/adachi/.local/share/fonts/ipagp.ttf'
offset=0x5c7f00
formatOfNameRecord=0x0000
numOfNameRecord=0x0024
stringOffsetOfNameRecord=0x01b6
nameオフセットテーブル(変更前)
platformIDencodingIDlanguageID nameIDlengthoffsetoffset.offset
00 00 01 mac 00 00 rom 00 00 en 00 00 00 a6 00 00 0x5c7f11
01 00 01 mac 00 00 rom 00 00 en 00 01 00 0a 00 a6 0x5c7f1d
02 00 01 mac 00 00 rom 00 00 en 00 02 00 07 00 b0 0x5c7f29
03 00 01 mac 00 00 rom 00 00 en 00 03 00 19 00 b7 0x5c7f35
04 00 01 mac 00 00 rom 00 00 en 00 04 00 0a 00 d0 0x5c7f41
05 00 01 mac 00 00 rom 00 00 en 00 05 00 0e 00 da 0x5c7f4d
06 00 01 mac 00 00 rom 00 00 en 00 06 00 0a 00 e8 0x5c7f59
07 00 01 mac 00 00 rom 00 00 en 00 0d 00 31 00 f2 0x5c7f65
08 00 01 mac 00 00 rom 00 00 en 00 0e 00 31 01 23 0x5c7f71
09 00 01 mac 00 01 jap 00 0b ja 00 00 00 a6 01 54 0x5c7f7d
0a 00 01 mac 00 01 jap 00 0b ja 00 01 00 0a 01 fa 0x5c7f89
0b 00 01 mac 00 01 jap 00 0b ja 00 02 00 07 02 04 0x5c7f95
0c 00 01 mac 00 01 jap 00 0b ja 00 03 00 19 02 0b 0x5c7fa1
0d 00 01 mac 00 01 jap 00 0b ja 00 04 00 0a 02 24 0x5c7fad
0e 00 01 mac 00 01 jap 00 0b ja 00 05 00 0e 02 2e 0x5c7fb9
0f 00 01 mac 00 01 jap 00 0b ja 00 06 00 0a 02 3c 0x5c7fc5
10 00 01 mac 00 01 jap 00 0b ja 00 0d 00 31 02 46 0x5c7fd1
11 00 01 mac 00 01 jap 00 0b ja 00 0e 00 31 02 77 0x5c7fdd
12 00 03 win 00 01 uni 04 09 en 00 00 01 4c 02 a8 0x5c7fe9
13 00 03 win 00 01 uni 04 09 en 00 01 00 14 03 f4 0x5c7ff5
14 00 03 win 00 01 uni 04 09 en 00 02 00 0e 04 08 0x5c8001
15 00 03 win 00 01 uni 04 09 en 00 03 00 32 04 16 0x5c800d
16 00 03 win 00 01 uni 04 09 en 00 04 00 14 04 48 0x5c8019
17 00 03 win 00 01 uni 04 09 en 00 05 00 1c 04 5c 0x5c8025
18 00 03 win 00 01 uni 04 09 en 00 06 00 14 04 78 0x5c8031
19 00 03 win 00 01 uni 04 09 en 00 0d 00 62 04 8c 0x5c803d
1a 00 03 win 00 01 uni 04 09 en 00 0e 00 62 04 ee 0x5c8049
1b 00 03 win 00 01 uni 04 11 ja 00 00 01 4c 05 50 0x5c8055
1c 00 03 win 00 01 uni 04 11 ja 00 01 00 12 06 9c 0x5c8061
1d 00 03 win 00 01 uni 04 11 ja 00 02 00 0e 06 ae 0x5c806d
1e 00 03 win 00 01 uni 04 11 ja 00 03 00 32 06 bc 0x5c8079
1f 00 03 win 00 01 uni 04 11 ja 00 04 00 12 06 ee 0x5c8085
20 00 03 win 00 01 uni 04 11 ja 00 05 00 1c 07 00 0x5c8091
21 00 03 win 00 01 uni 04 11 ja 00 06 00 14 07 1c 0x5c809d
22 00 03 win 00 01 uni 04 11 ja 00 0d 00 62 07 30 0x5c80a9
23 00 03 win 00 01 uni 04 11 ja 00 0e 00 62 07 92 0x5c80b5

書き換えは1バイトだけです。mac_jaのnameID=01を0x13(10進だと19)にしました。これは「family-name」だったところを、「サンプルテキスト」にしたものです。結果としてmac_jaのfamily-nameは書いていないということになります。

"IPA P明朝"の時と異なり、win_jaのfamil-ynameの文字列を変えていません。

文字列へのオフセット計算、バイト列とデコード例 nameID=01のみ抜粋(変更後)
offsetlength開始位置呼出元plat_lang呼出元nameID バイト列(デコード前の文字列)utf_16_beshift_jis
00a6100x5c815cmac_en01 49 50 41 50 47 6f 74 68 69 63 䥐䅐䝯瑨楣IPAPGothic
01fa100x5c82b0mac_ja0119 49 50 41 50 47 6f 74 68 69 63 䥐䅐䝯瑨楣IPAPGothic
03f4200x5c84aawin_en01 00 49 00 50 00 41 00 50 00 47 00 6f 00 74 00 68 00 69 00 63 IPAPGothicIPAPGothic
069c180x5c8752win_ja01 00 49 00 50 00 41 00 20 00 50 30 b4 30 b7 30 c3 30 af IPA PゴシックIPA P0エ0キ0テ0ッ

"IPA Pゴシック"を書き換えた結果

フォントビュアーです。"IPA Pゴシック"が2つ見えます。左が'/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf'のもの、右が'.local/share/fonts/ipagp.ttf'のものです。ゴシックではフォント名を変えなかったので同名で並んでいます。"IPA P明朝"は4つ並んでいます。/usr/share/のものと、.local/share/のもの3つです。そしてフォント名を変えた.local/share/のものひとつです。全部終わったら、"IPA Pゴシック"と同じ2つに変更しようと思っています。

Calcのフォント選択では、書き換え前は'IPA Pゴシック'はありませんでした。別のところに'䥐䅐䝯瑨楣'があるのです。"IPA P明朝"については、文字化けした'䥐䅐䵩湣桯'が離れたところに一つだけあります。Calcでは重複はまとめられるようです。名前を変えた"IPAcP明朝"は出ています。

'IPA Pゴシック'の書き換え後です。'IPA Pゴシック'が選択肢に出ています。別のところに'䥐䅐䝯瑨楣'も残っています。

Gimpです。"IPA Pゴシック"も、"IPA P明朝"もttfファイルの数だけ表示されています。'䥐䅐䝯瑨楣'も'䥐䅐䵩湣桯'も、ありません。この辺の判断はアプリごとに異なるようです。

まとめ

ひとつ前のページ「フォントファイルを書き換えてフォント名の文字化けを回避する」には、/usr/share/fonts/以下にあるttfファイルを書き換える方法で、しかもmac_jaのoffsetをwin_jaのものに書き換えるというトリッキーに見える方法でYOzフォントの対策をすることを紹介しています。

このページでは、.local/share/fonts/にコピーされたttfファイルを書き換える方法で、mac_jaのnameID=01のoffsetとしているレコードをnameID=0x13にして、mac用のfamilynameをなきものにする方法を"IPA P"フォントを題材に紹介しています。

現在の不具合のあるfontconfigへの対策としては題材のフォントに限らず、どちらでも有効かと思いますが、後者のほうが簡単かつ安心な方法だと思います。

(1).local/share/fonts/へのコピーは、フォント(org.gnome.font-viewer)というDebian13-GNOMEの標準アプリで簡単に行える。

(2).local/share/fonts/のフォントはroot権限がなくても一般ユーザーで変更でき、やり直しも楽。

(3)Win用のオフセットを読んでmac用の部分に書き込むよりは、mac_jaの01をmac_jaの0x13とか0xAにする方がわかりやすい。

(4)fontconfigが修正されてもそのまま使える可能性が高い。