Skip to content

Instantly share code, notes, and snippets.

@xl1
Last active May 31, 2022 05:29
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save xl1/940d653451fd96a06618a6df08d5df84 to your computer and use it in GitHub Desktop.
Save xl1/940d653451fd96a06618a6df08d5df84 to your computer and use it in GitHub Desktop.
PDF に謎の漢字が含まれるとき

PDF に謎の漢字が含まれるとき

PDF などの中にある一部の日本語の漢字が、見た目は同じだけど異なる謎の文字に変換されていることがある

この文字は 康煕部首 (Kangxi Radicals) というもので、部首としての文字である

  • MS ゴシックなど Kangxi Radicals の字形がないフォントを指定すると表示できないので区別しやすい

どこから来たのか?

これらは(フォントによるが)通常の漢字と同じ字形を持っていることが多く、また U+2F00-U+2FD5 に配置されているので通常の漢字 (U+4E00 以降) より前にある。 そのため、仮想 PDF プリンタなどで変換するときに誤って参照されている可能性がある (詳しくは調べてない)

例えば、フォントに「メイリオ」を指定して 長崎県 とだけ書いた .docx ファイルを用意し、Microsoft Print to PDF を使って PDF に変換すると、「長 (U+9577)」が「⾧ (U+2FA7)」に変換されることが再現できる。 Word で直接 PDF ファイルを保存すると、変換されずに保存できる

対策

自分で PDF を作ることはあまりないが、ほかの PDF からコピーしたものに Kangxi Radicals が含まれてしまうことがある。 これを気づいて元の漢字に戻せるように textlint rule を作ってある:

ここにも変換表を貼っておく:

{"⼀":"一","⼁":"丨","⼂":"丶","⼃":"丿","⼄":"乙","⼅":"亅","⼆":"二","⼇":"亠","⼈":"人","⼉":"儿","⼊":"入","⼋":"八","⼌":"冂","⼍":"冖","⼎":"冫","⼏":"几","⼐":"凵","⼑":"刀","⼒":"力","⼓":"勹","⼔":"匕","⼕":"匚","⼖":"匸","⼗":"十","⼘":"卜","⼙":"卩","⼚":"厂","⼛":"厶","⼜":"又","⼝":"口","⼞":"囗","⼟":"土","⼠":"士","⼡":"夂","⼢":"夊","⼣":"夕","⼤":"大","⼥":"女","⼦":"子","⼧":"宀","⼨":"寸","⼩":"小","⼪":"尢","⼫":"尸","⼬":"屮","⼭":"山","⼮":"巛","⼯":"工","⼰":"己","⼱":"巾","⼲":"干","⼳":"幺","⼴":"广","⼵":"廴","⼶":"廾","⼷":"弋","⼸":"弓","⼹":"彐","⼺":"彡","⼻":"彳","⼼":"心","⼽":"戈","⼾":"戸","⼿":"手","⽀":"支","⽁":"攴","⽂":"文","⽃":"斗","⽄":"斤","⽅":"方","⽆":"无","⽇":"日","⽈":"曰","⽉":"月","⽊":"木","⽋":"欠","⽌":"止","⽍":"歹","⽎":"殳","⽏":"毋","⽐":"比","⽑":"毛","⽒":"氏","⽓":"气","⽔":"水","⽕":"火","⽖":"爪","⽗":"父","⽘":"爻","⽙":"爿","⽚":"片","⽛":"牙","⽜":"牛","⽝":"犬","⽞":"玄","⽟":"玉","⽠":"瓜","⽡":"瓦","⽢":"甘","⽣":"生","⽤":"用","⽥":"田","⽦":"疋","⽧":"疒","⽨":"癶","⽩":"白","⽪":"皮","⽫":"皿","⽬":"目","⽭":"矛","⽮":"矢","⽯":"石","⽰":"示","⽱":"禸","⽲":"禾","⽳":"穴","⽴":"立","⽵":"竹","⽶":"米","⽷":"糸","⽸":"缶","⽹":"网","⽺":"羊","⽻":"羽","⽼":"老","⽽":"而","⽾":"耒","⽿":"耳","⾀":"聿","⾁":"肉","⾂":"臣","⾃":"自","⾄":"至","⾅":"臼","⾆":"舌","⾇":"舛","⾈":"舟","⾉":"艮","⾊":"色","⾋":"艸","⾌":"虍","⾍":"虫","⾎":"血","⾏":"行","⾐":"衣","⾑":"襾","⾒":"見","⾓":"角","⾔":"言","⾕":"谷","⾖":"豆","⾗":"豕","⾘":"豸","⾙":"貝","⾚":"赤","⾛":"走","⾜":"足","⾝":"身","⾞":"車","⾟":"辛","⾠":"辰","⾡":"辵","⾢":"邑","⾣":"酉","⾤":"釆","⾥":"里","⾦":"金","⾧":"長","⾨":"門","⾩":"阜","⾪":"隶","⾫":"隹","⾬":"雨","⾭":"靑","⾮":"非","⾯":"面","⾰":"革","⾱":"韋","⾲":"韭","⾳":"音","⾴":"頁","⾵":"風","⾶":"飛","⾷":"食","⾸":"首","⾹":"香","⾺":"馬","⾻":"骨","⾼":"高","⾽":"髟","⾾":"鬥","⾿":"鬯","⿀":"鬲","⿁":"鬼","⿂":"魚","⿃":"鳥","⿄":"鹵","⿅":"鹿","⿆":"麥","⿇":"麻","⿈":"黃","⿉":"黍","⿊":"黒","⿋":"黹","⿌":"黽","⿍":"鼎","⿎":"鼓","⿏":"鼠","⿐":"鼻","⿑":"齊","⿒":"齒","⿓":"龍","⿔":"龜","⿕":"龠"}

関連

@kawabata
Copy link

kawabata commented Oct 2, 2020

FYIですが、UnicodeのNFKC正規化処理によって、康熙部首文字を漢字に戻すことができます。

@fumiyas
Copy link

fumiyas commented Oct 13, 2020

Unicode 正規化すると「福神づけ」が「副神づけ」に、「①」が「1」なってしまうなど、余計な副作用が生じるのでよろしくないですよ。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment