LoginSignup
0
0

More than 1 year has passed since last update.

FreeType で OpenCV に日本語を putText する機能を追加しようとしたら Surrogate-pair と 異体字 IVS 対応が地味に面倒だったので備忘録

Last updated at Posted at 2022-05-13

観え方(グリフ)が同じでも文字列中のコードが同じとは限らない & Variation Selector が曲者

(もちろん別の意味で使われているが VS と言っても Variation Selector だったり Variation Sequence だったり)

  1. 文字列中のコードが同じでも観え方(グリフ)が同じとは限らない
  2. 観え方(グリフ)が同じでも文字列中のコードが同じとは限らない

※ここで言っている「観え方」とは glyph index (FT_Face_GetCharVariantIndex や FT_Get_Char_Index の戻り値から render 後の字形まで) のことを指す (同一ファイル内の glyph index であっても対応するコードが複数存在する場合がある)

  • 異体字とは前者(1)だと思っていたが後者(2)と前者(1)どちらも存在する

つまりフォントの選択や表示するソフトウェアの選択が全て正しくても逆変換が元の文字と一致するとは限らないということ(いわゆるunicode自身の正規化等とは無関係)

(IVS は対応出来た SVS は多分まだ)

  • OpenCV 用

  • console (test) 用

異体字「祇󠄀(u7947 ue0100) 祇󠄁(u7947 ue0101)」

異体字 unicode utf-16 (BE) 実際の表示
祇󠄀 u7947 + ue0100 79 47 db 40 dd 00 祇󠄀 (選択フォントによっては祇󠄁)
祇󠄁 u7947 + ue0101 79 47 db 40 dd 01 祇󠄁 (選択フォントによっては祇󠄀)
u7947 79 47 祇󠄁 (選択フォントによっては祇󠄀)

別の字「祗(u7957)」 別の字「衹(u8879)」 等の表示について

別の字 unicode utf-16 (BE) 実際の表示
u7957 79 57
別の字 unicode utf-16 (BE) 実際の表示
u8879 88 79 衹 (選択フォントによっては豆腐)

テストしたフォント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0