Index > FrameMakerにインポートしたXMLデータ文字化け対処方法
Wed, August 22, 2007

FrameMakerにインポートしたXMLデータ文字化け対処方法

たとえば、ラテン文字のチルダ付aなどを含んだXMLデータ(UTF-8)を FrameMaker7.xにインポートすると文字化けが発生してしまう。

FrameMaker7.xでは、ユニコードを直接扱わないで、 各言語ごとの文字エンコードを使っているため、 たとえば、XMLデータがUTF-8でエンコードされたいた場合、FrameMakerに インポート時に文字の変換が行われ、 この時に文字化けが発生するようです。(あくまで推測ですが)

ちなみに、FrameMaker8では、FrameMaker自体がユニコードを 扱うため、インポート時に文字の変換が行われないため、 この手の文字化けが発生しないようです。

チルダ付aが文字化けする

対処方法自体はシンプル。チルダ付a(ã)を ã に置き換えた上で、 FrameMakerにインポートしなおします。 これで問題解決。

ただし、このような置き換えはたくさん発生するし、 置き換えの必要なキャラクタは、aチルダだけではありません。

また、XMLデータ編集時に、aチルダを書くべきところを ã などと 書いていくのは苦痛でしょう。

したがって、FrameMakerへのインポート直前にプログラムで機械的に 変換を行うのが一番良さそうです。

exを使う

以下のようなexscriptを作成しておいて

%s/チルダ付a/\ã/g
w

※チルダ付a ... のところは、ã です、実際は。

$ ex foo.xml < exscript 

これで一括置き換えできます。 しかし、わたしが使っている環境では、チルダ付aが表示できなかったため、 (したがって入力する方法も良く分からない)jythonで対処することにしました。

たまたまjythonでやっていますが、Javaでやっても同じことだと思います。

jythonで置き換え処理する

ポイントは、 チルダ付aが直接入力できないので、ユニコードで指定します。

チルダ付aの文字コードを調べるには、 http://www.unicode.org/charts/ を参考に探します。

replace.py

import sys
import java.lang as lang
import java.io as io
import org.apache.commons.io as cio


def toString(inf):
    fis=io.FileInputStream(inf)
    text=cio.IOUtils.toString(fis,"UTF-8")
    fis.close()
    return text


file=io.File(sys.argv[1])
text=toString(file)

text=lang.String(text).replaceAll('\u00E3',"\&amp;atilde;")
text=lang.String(text).replaceAll('\u00E7',"\&amp;ccedil;")
print text

実行するには、

$ jython replace.py foo.xml

※commons-io を使っているので、commons-io-1.1.jar 等へクラスパス通す必要あり。

 Twitter
follow me on Twitter
 Categories