InDesign MY-NOTEBOOK

Monday, July 14, 2008

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/>など)に置き換えるといった処理でなんとかなるのではないかと。

© 2011,2012 Tomoaki Oshima