見た目の変わらない文字化け―康煕部首とメイリオ
カテゴリ:
hr.icon
事件編
https://gyazo.com/ea07ebd88d2551b9062f01785a2fcd03
「なんだろう。このxから始まる記号は?」
抽出語をクリックするとその語が出てくる文章を見られるので確認をしてみます。
https://gyazo.com/d2c8232f640e5d8073aa01fa295393a2
どうやら”自分”の”自”の字が文字化けをしているようなので、元のエクセルファイルを見てみました。
https://gyazo.com/346c23dd08075105a2e5ee1a3e17114d
「あれ、別に変な文字入っていないな。」
そこで、元のエクセルファイルから必要部分だけ取り出してcsvファイルにした際のエンコードの問題かと思い、変換の際にUnicode(UTF-8)になっていることを確認して再度変換してみました。
https://gyazo.com/91afb8cfef29ba9957a1bd774751a2ac
そこで、文字化けしていた”自”をgoogleで検索してみました。
https://gyazo.com/7e43bd0f8fc8acd1d8fd660b948e355f
検索しても、普通の”自”なようです。もう何がなんだかわかりません。
しかし、メモ帳で開いてみたときに異変に気付きました。
https://gyazo.com/2f0bb763512f3ed7e12ff25da874e06f
「あれ、なんか少し小さい”自”や”高”、”身”がある!?」
そこで、普通に見える”自”と小さく見える””自のUnicodeを確認してみました。
https://gyazo.com/099da61af1c621dd931b4bf97a78fe7d
やはり、文字が違うようです。
今度はこのUnicodeで検索してみます。
https://gyazo.com/695c80d52d141ec5347cbf00e800c3fe
「Kangxi Radical Self Unicode?なんだこれは?」
調べてみるとこれは「康煕部首(こうきぶしゅ)」という特殊な漢字のUnicodeのようでした。 (*2)
また、どうやらgoogleで康煕部首の漢字を検索しても、普通の漢字の検索結果を出してしまうようでした。
解決編
この康煕部首がどのように文字化けを起こしているのか、”康煕部首”+”文字化け”で検索すると「メイリオの罠」というブログ記事がありました。
詳しい説明はこのブログのとおりなのですが、モリサワのCharacter Mapの説明(*3)と合わせてみると、次のような問題が起こり得るようだということがわかりました。
解釈が間違っているかもしれませんが、どうやら、何か文字を印刷しようとすると、文字コードからCharacter Mapを使ってフォント識別番号に変換されるそうです。
この変換は明朝などのフォントでは基本的には単射になるようです。
https://gyazo.com/41a51a1b962eb7b4b9128595e9d0d9e2
しかし、メイリオの場合は、単射にはならないようです。
https://gyazo.com/1e88c4d9b28e42c65ae71e7244a726ea
そのため、メイリオのフォントを使っていると、普通の漢字と康煕部首の漢字のフォント識別番号が同じものになるようで、見た目では違いがわからないようです。
そして、印刷されたものからCMAPを通して再度文字コードに変換しようとすると、次の図のように文字コードの番号の若い康煕部首の方に変換されてしまうようです。
https://gyazo.com/cf07eac0a8fef4cfa4ea5a836c657e1f
このような問題が起こり得ることはわかりました。しかし、なぜ今回のあるプログラムのアンケートでこのようなことが起きたのでしょうか。今回のアンケートがどのように取られたのか確認をしてみました。すると次のような経緯であったことが分かりました。 ・元々のアンケートの目的が、分析がメインではなく、次回プログラム参加者のための参考用の閲覧資料とすることがメインであった。
・そのため、アンケートはPDFで提出をさせていた。
・提出者はアンケートをPDFにする際、ワードファイルの様式からそのままPDF形式で保存して提出した者もいれば、手書きのものをスキャンしたPDFで提出した者もいる。
・エクセルに自由記述を入力する際には、文字情報のあるPDFからはコピペで転記し、そうでないスキャンしたPDFからはタイプし直した。
なんということでしょう!まさしく前述の問題が起こり得そうな状況です!!PDF形式への保存の際に印刷時の文字コードからフォント識別番号への変換が行われて、しかし文字コードは康煕部首の文字コードとなってしまうような現象が起きてしまっていたのでしょうか。
文字化けで悩んでいたのが嘘のように、謎解きの快感のようなものさえ感じていました。
どうやら、アンケートの結果をエクセルに落とし込む際に、文字情報のあるPDFからコピペした文章はなんらかの理由である種類の漢字が康煕部首に変換されてしまい、手書きのスキャンからタイプし直した文字は普通の漢字になっていたようでした。 ちなみに、PDFに変換した際にどのように普通の漢字が康煕部首になってしまうのか、少し試してみました。
試した環境はWindows10で、まずWordに漢字を入力し、それをPDFで保存してから、そのPDF上の漢字をコピペしてメモ帳に貼ってUnicodeを確認しました。結果は次のとおりです。
https://gyazo.com/752e496202ea500dfdab63f34edf2fc4
文字化けが再現できたのは、メイリオを使用して、そのファイル内に康煕部首が入っている場合だけでした。実際にはWordのアンケートをPDF化する際にもともとファイル内に多様な康煕部首が入っていたとは考えにくいので、もっと劇的に普通の漢字が康煕部首に変わってしまう状況があるのだと思います。 とりあえずの対処法
あまりよい対処法は見つけられていません。康煕部首となってしまった漢字はKH-Coderの抽出語で”x{####}”(####部分に文字コードが入る)と表示されるようでした。そこで”x{####}”となっている文字をひとつひとつ確認して、康煕部首になってしまっている漢字と普通の漢字の対応表を作りました。今回のアンケートの文字化け対応表は次のようなものになりました。 https://gyazo.com/6b86336b7dd22ae1d2de6cac8517fe11
これを使って地道に康煕部首の漢字を普通の漢字に置換機能で変換していきました。
近藤先生のコラム(/jair/データクレンジングとIRモンスターデータ)で「IRモンスターデータあるある」を持ち寄って議論するのもよいかもしれないと書かれていましたが、今回の場合も過去に似たような問題が起きたことをブログに書いていてくれた人がいたことが解決の糸口となったので、こちらのコラムで共有させていただきました。 いやぁ、データってホント怖いもんですね~。それでは、さよなら、さよなら、さよなら。
hr.icon
(*1) この内容は私個人の見解であり、所属組織の見解ではありません。
(*2) 康熙字典という1716年に完成した中国の漢字辞典に収録されている214の部首のことを康煕部首というそうです(Wikipedia, 2020/01/11 22:43)。
(*3) CMap・cmap(Character Map)