Home About Contact
XML , InDesign , DTP

InDesign(CS3)でXML書き出ししたときの改行(u2029 = PARAGRAPH SEPARATOR)の取り扱い方法

InDesignでXML書き出しするときに、改行情報はどうなるのか?の調査。

改行がどう扱われるか

現在、XMLを意識しないで作成されたInDesign文書をXML化する仕事をしている。
InDesign上で 各テキストフレームを選択して→タグ作成 の繰り返しで、構造化した上で、 構造ウインドウメニューから[XMLの書き出し]を選択するとXMLが書き出される。
(このとき「改行、空白、特殊文字を再マップ」オプションはチェックしない)

書き出されたXMLファイルをメモ帳などで開くと、ぱっと見た感じでは、改行コードは入っていないように見える。 しかし、実際にはInDesign上で改行した位置に何か文字が入っていることはわかる。

何が入っているかわからなかったので、Javaを使って調べるコードを書いた。 (あとでわかったのだが、emacsで開くと改行位置に確実に何か文字があることが わかる。なんの文字かはわからないから、やはり調べる必要がある。)

テスト用コード

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[] args) {
        File f = new File("sample.xml");
        try {
            FileInputStream fin=new FileInputStream(f);
            InputStreamReader r=new InputStreamReader(fin,"UTF-8");
        
            int ch=0;
            while( (ch=r.read())!=-1 ){
                System.out.print((char)ch);
                System.out.print("->");
                System.out.println(Integer.toHexString(ch));
            }
            r.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

テスト対象となるXMLファイル(InDesignから書き出したXMLの抜粋)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<div>ボイスレコーダー
品番 120RM</div>
</Root>

実行結果の抜粋

ボ->30dc
イ->30a4
ス->30b9
レ->30ec
コ->30b3
ー->30fc
ダ->30c0
ー->30fc
?->2029

->0
品->54c1
番->756a

※ボイスレコーダーの直後に改行(u2029)が入っていることがわかる。 (その後ろにも何か文字があり気になるが、まだ調べはついていない。)

翻訳時のトラブルの可能性

この件でネットをさまよっていると、InDesignから書き出したXMLをトラドスで翻訳するときに、 この改行がらみで、不都合があるという書き込みを見つけた。

その書き込んだ方によるとトラドスは、

とのこと、現在のバージョンのトラドスでも起きるのかは不明だが、 この仕事でも書き出したXMLをベースに多言語に翻訳をしていくため、他人事ではない。

対応策

XMLデータをトラドスに渡す前に u2029 の改行コードを別の文字列(たとえば<br/>など) に置き換えるといった処理でなんとかなるのではないかと。