PDF からテキストをコピペしたときに稀に見られる潰れた文字のメモ

あるとき、エディタ上で「入」の文字が化けてしまって困ったので原因を探ったのでメモしておきます。

経緯

エディタ上でファイル名をコピペしたら「入」の文字が化けてしまいました。エクスプローラ上で見ると一見普通の「入」の文字のように見えたのですが……。

左が文字化けした入、右が手入力した入
左が文字化けした入、右が手入力した入

メモ帳に貼り付けたところ、明らかに様子がおかしいことに気付きました。

左が文字化けした「入」、右が手入力した「入」です。

何故か今回文字化けした「入」は半分くらいに潰れていますね……。字形が異なるということは、もちろん、文字コードも別です。ユニコードで見ると左が \u2F0A 、右が \u5165 です。

何でしょうこれ……。

調査

調べてみると、他にもこうした文字があることが分かりました。

⼊入
⼈人
⻄西
⾃自
⾞車
⼒力
⼿手
⾮非
⼤大
⼯工

今回採集した例が上述。

半分潰れたような文字の採集結果
半分潰れたような文字の採集結果

メモ帳で見るといずれも半分くらいの大きさに潰れています。エクスプローラで見るとほとんど違いが分からないのですが、先述の通り文字コードが別なのでファイル名はしっかり別物と認識されます。

そのため、同じファイル名が複数あるように見えるというなかなか面白い困った状況に陥ります。

さらに調べた結果、原因が判明しました。原因は PDF でした。

  • PDFの中のテキストは文字コードとは別の固有の番号で文字を出力しているが、Unicodeのような文字コードとは互換性はない
  • 一応文字コードとPDF固有の番号の変換テーブルはある
  • が、この変換テーブルがない PDF が存在する
  • そうした場合、昇順で文字を参照するが本来の文字ではなく部首に当たる文字が先にヒットしてしまう
  • この部首に当たる文字が先の半分潰れたような文字の正体
  • 結果、コピペ等 PDF の中からテキストを抜く際に本来の文字ではなく、部首に当たる文字が抜き出される。その文字は通常の文字ではないため、一部の環境では化ける

ざっくり言うとこんな感じの原因の模様。確かに、今回のケースでも PDF の中から見出しのテキストをコピペしてファイル名にしていました。その際に先の条件に当てはまり、通常の ではなく、 を混入させてしまった、ということのようです。

原因が分かれば納得ですが、なんと面倒な……。

参考

(余談)

今回の件とは別件ですが、まあ文字コードがらみは厄介ですよね、というお話。

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。