2011年6月29日水曜日

DXFファイルの文字化け対処

大抵の客先から提供されるDXFファイルは日本語コードがS-JISであるため、特に問題なく自前のCADに読み込むことができる。

ただ、とあるメーカーから提供されるDXFファイルの日本語部分が以下のような文字列で表記されていた。
\M+1907D\M+196CA\M+100CB\M+100DE\M+100AD\M+100B0 B\M+196EE\M
 上記の例だと実際には「図面ビュー B矢視」という文字列にならなければならないのだが、手持ちのCAD(数種類)やテキストエディターなどを駆使しても変換出来ず半ばあきらめていた。

そもそも図面データを提供される場合は一緒に"紙図"(最近ではPDFで提供されることの方が多い)も一緒に提供されるのが通例なので、形状データだけDXFからインポート出来ればそれほど文字化けが問題になることはなかった。

ところが先日請け負った設計作業が「データだけ先行手配します」ということで、上記のような日本語コードのDXFファイルのみ提供された。

納期がキツいと言うことでの先行手配なのだが、「PDFの紙図データ下さい」と言ってもメーカー担当者に直接依頼出来るわけでもなく、特にこういった短納期パターンは請求の嵐に限界ギリギリのメーカー設計者が週末に切羽詰まって"データだけ先行提供する"といったシチュエーションが少なくない。www

結局DXFデータが手元に届いた時には既に時遅く、「紙図のデータも下さい!」などと発注元へ請求しても、「メーカーが休みのため週明けで無いと担当者と連絡が付きません...orz」といった状態に...。

それでも「週明けには"構想図"が見たい」などの要求もあるため、今回は腰を据えて文字化け対処してみました。

そもそも提供される問題のDXFファイル自体は"ASCII"コードで、日本語を含める状態ではない。
見た感じUNICODEっぽい気もしたので、一生懸命テキストエディターで弄ってみたがASCIIコードはASCIIコード、それ以上どうなるものではない。orz

結局どんなエンコードがされているのか分からないと元に戻すすべも見つからないので、"バックスラッシュ" + "M" + "コード" で表記される文字コードの情報をググりまくって「QCAD日本語」というページ内の以下の説明を見つけました。
AutoCADのInternationalization
DOS Extenderを使ってたころから、シフトJISコードで日本語が利用できました。 Unifont が導入されたのは R13 からです。英語版AutoCADではWindows Latinの範囲の文字は普通に入力し、それ以外の文字は、\U+XXXX の形式で入力できるようになりました。これをCIFといいます。XXXXはUnicode (UCS-2)の16進数表記です。たとえば、 ('Д') は ('\U+0414') と表現します。
また、英語版AutoCADで、日本語などMBCSの文字を表現する、MIFという表現方法も定義されています。\M+NXXXX の形式で、NはMBCS識別コード(0-5のいずれか)で、XXXXは16進4桁で言語別の文字コードです。日本語は識別コードは1で文字コードはシフトJIS、繁体中国語は2でbig5などと決まっています。あ は \M+182A0 と表現します。
R9からR12のDWG,DXFは言語またがりのデータ交換に注意を払っていませんが、R13からは注意が払われるようになりました。文字コードの違いは、AutoCAD2007でUnicodeアプリケーション、データベース化されたことにより完全解決されました。2007DXFでは、文字はUTF-8で表現されます。
との事。つまり問題のDXFファイルは"MIF"という表記方法で日本語が記載されているって事ですな。

そこまで分かれば"MIF"コードを"Shift-JIS"等、手持ちのCADで読み込めるコードに変換してくれるソフトを探すだけ...。 が、なかなか見つからない。orz

"MIF"っていう規格名がいろんなジャンルで使われててAutoCADの"MIF"情報になかなかヒットしない。
それでも探しているうちに"Visio and You"という個人で運営されているサイトの中に
なお、MIF 形式のデータを、通常の Shift-JIS の日本語へ変換するソフトウェアを、ライブラリで公開しています。
とのありがたいお言葉を発見。\(^O^)/

プログラムの使用許諾についてはあまり詳しいことが記載されていなかったのですが、「ソフトウェアの利用は自己責任で...」の条件をふまえ、"ライブラリ"に掲載されていた"ChrConv"という変換ソフトを利用させて頂くことで今回のDXFファイルの文字化けは無事回避出来ました。

有用なソフトウエアを公開して頂いた作者様、この場を借りてお礼申し上げます。
ありがとうございました。m(_ _)m


0 件のコメント :

コメントを投稿