ダルシーのにっき: 5月 2017

特定の条件でのみ文字化けが起こる謎

実に1年半ぶり?くらいの投稿(^^;

多分、残しておきたい備忘メモはたくさんあったハズなんだけど・・・もう忘れてしまいました。
このブログの意味、まるでゼロ(笑)

さてさて、本題にまいります。

cat


少し前まで問題なかったのに、なぜか社内システムの帳票を印刷するときだけ文字化けするとの連絡を受けまして。

ExcelやWordなんかは問題なく印刷できる。
PDFなども問題なし。
不具合の起きている帳票システムも、画面上の表示は正常。

とまぁなんとも面倒くさいややこしい状況。

話が長くなるので結論から言いますと、レジストリエディタで該当箇所の値データを修正し、解消しました。

今回文字化けを起こしたのは、本来はMSゴシックで表示されるべき部分だったので、私の場合は以下を修正。

レジストリ エディターの左ペインのツリーから、下記のキーを展開し、選択します。
         [コンピューター]
           - [HKEY_LOCAL_MACHINE]
               - [SOFTWARE]
                   - [Microsoft]
                       - [Windows NT]
                           - [CurrentVersion]
                               - [Fonts]

右ペインの一覧画面から、削除対象のフォント(今回の場合はMSゴシック)を確認します。



右クリックメニューから「修正」をクリックし、値データを確認すると  msgothic_0.ttc となっていました。
これを msgothic.ttc に修正し、PCを再起動。


どうやらMSさんも認識はしているようです。


詳細は現在調査中ですが、以下のような条件で現象が発生することが確認されています。
・異なるファイル名のフォント ファイルによって、同じフォント名のフォントがインストールされている。
 
・上記のそれぞれのフォントにおいて、同じグリフ ID に、別のグリフが割り当てられている。 
・上記のフォント名を指定し、GDIPlus の Graphics.Drawstring 関数で文字列の描画を行っている。
確認されている状況として、Windows 10 日本語版に Office 2007 日本語版をインストールした際、Windows 10 日本語版に標準でインストールされている msmincho.ttc のほかに、Office 2007 日本語版によって MSMINCHO.TTF がインストールされ、上記のような状況となります。このとき、Windows 10 の GDIPlus を使用し Graphics.Drawstring 関数でMS 明朝の文字列を描画すると、文字化けが発生します。文書番号:3144536より抜粋



Win10に限った話というわけでもないようで。。。Win7でも同様の方法で解決しました。


Read More