「よろしくお願いします」が「よろしくお願いし〼」になってしまうタイプの文字化けがあるらしい
メモ。
Devin が突然 "どちらの方針で実装し〼か?" とか言い出して何かと思ったらこれだった。 Discretionary Ligatures というのか https://t.co/vTjz51C23L https://t.co/Xsf9hVXmb4
— Yuki Fujisaki / rai (@tnj) March 25, 2026
リガチャ
特定の文字の並びを、見やすさや美しさのために特殊な1文字にまとめるという習慣があり、それをコンピュータ上でも実現できるようにしたもの。
Discretionary Ligatures
f+fのような伝統的なリガチャに加え、フォント固有のオリジナルのリガチャを持てるようにしたもの。(OpenTypeの仕様?)
これを表示するには以下の条件が必要
- フォントがDiscretionary Ligaturesを持っている(例:ま+す=〼)
- テキスト上にその並びが現れる(例:「ます」)
- フォントの描画エンジンで、Discretionary Ligaturesを有効にする
- 例えばCSSで設定するとか
ghosttyの場合
ターミナルエミュレータghosttyでdligが全面的にオンになっていて、この手の文字化けが発生していたというIssueがあった。
font-feature = -dligで直るらしい(現在どうなっているかは未確認)
Devinの場合
Twitterを見ているとDevinユーザで同様の事象を報告している人を見る。Devinは使ったことがないのでわからないけど、WebインターフェイスのCSSでdligが全面オンになってるとかなのかもしれない。
なぜこのような問題が起きるのか?
issueからもリンクされていますがOpenTypeの使い方が間違っていて dlig というデフォルトオフで特殊な場合に適用されるべき合字をデフォルトオンにしてしまってるので起きてる問題ですね https://t.co/BOO5icuSYs
— にゃんだーすわん (@tadsan) January 14, 2025
dligは本来、合字にしたいところだけ局所的にオンにするもので、画面全体でオンにするようなものではない。
が、iosevkaやFira Codeのような一部のプログラミング用フォントで、->や<=>といった並びを合字にできるものが存在する。この機能を使おうとして「とりあえず一括でdligオン」にしているということなのかもしれない。個人的にはこの手の合字は嫌い(だって->は->じゃん)なので邪推だけども。