文字化けで一部の文字だけ何故かハテナに化ける

文字コードで化けてて化けてない話
http://workmemo.techblog.jp/archives/41062154.html

こちらの続きです。
そもそもなんで化けてるのか、っていうのが少しわかってきたのでメモ。

PDFからコピーした時に一部の漢字が化けていてDB(postgreSQL)に入っていた結果、
メールを経由すると「?」として表示されてしまう(DBを直接見ると化けてないように見えてしまうけど、文字コードを直接見ると化けてる)という現象でした。

これ原因は康煕部首(こうきぶしゅ)という、漢字とも部首とも取れる文字として扱われ、これとして対応できる文字自体が化けていました。

やるとしたらこの康煕部首として使える文字を全て置換すれば自動置換で行けそう。

例)

select
  data ,
  translate(data, 
    /*部首の'⼈'*/chr(12040) ||  /*部首の'⼗'*/chr(12055) ||
    /*部首の'⽤'*/chr(12132) ||  /*部首の'⽬'*/chr(12140) ||
    /*部首の'⾊'*/chr(12170) ||  /*部首の'⾏'*/chr(12175) ||
    /*部首の'⾔'*/chr(12180) ||  /*部首の'⾯'*/chr(12207) ||
    /*部首の'⾷'*/chr(12215) ,  '人十用目色行言面食')
from table
where
   (
    data like '%' || /*部首の'⼈'*/chr(12040) || '%' or
    data like '%' || /*部首の'⼗'*/chr(12055) || '%' or
    data like '%' || /*部首の'⽤'*/chr(12132) || '%' or
    data like '%' || /*部首の'⽬'*/chr(12140) || '%' or
    data like '%' || /*部首の'⾊'*/chr(12170) || '%' or
    data like '%' || /*部首の'⾏'*/chr(12175) || '%' or
    data like '%' || /*部首の'⾔'*/chr(12180) || '%' or
    data like '%' || /*部首の'⾯'*/chr(12207) || '%' or
    data like '%' || /*部首の'⾷'*/chr(12215) || '%' )
group by
    data
;

(データは一部です)

参考:
https://ja.wikipedia.org/wiki/%E5%BA%B7%E7%85%95%E9%83%A8%E9%A6%96 
https://golden-lucky.hatenablog.com/entry/2019/12/05/171340