<0x00xx>タグのUTF-16テキストでの扱いについて

[6702]<0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:付箋 | 投稿日:2012/04/17(Tue) 17:22:46
MacOS10.6.8 CS3-CS5.5共通の課題です。

文字にCIDコードを指定しようと思い,
<UNICODE-MAC>
<pstyle:><cSpecialGlyph:11686><0x001a><cSpecialGlyph:>火
のようなテキストを書き,UTF-16BE/改行コードCRで保存しました。

これを各バージョンのInDesignで読み込んだところ,
「<行番号> : - 2 <エラー> : - 無効なタグ "<0x001a>" をテキストとして読み込み中です。」
というエラーに必ずなります。

HexEditでテキストを覗いてみたところ,<0x001a>のデータ部分は,
00 68 00 3A 00 31 00 31 00 36 00 38 00 36
00 3E 00 3C 00 30 00 78 00 30 00 30 00 31 00 61
となっています。
UTF-16ですから当然ではありますが,1バイトタグ1文字を16ビットで表現しています。
おそらく,16ビットで文字表記をしている関係で,InDesignがタグを文字列と解釈してしまっているのではないかと思います。
いわゆる「特殊文字」タグはみなこういったエラーではじかれてしまったような記憶が別の仕事でもあります。
「シフトJISで流すと良い」という情報も目にした事がありますが,多言語業務の兼ね合いからシフトJISを扱うことはないため,なんとかUTF-16のテキストで特殊文字タグを認識させられないかと考えています。
どうぞアドバイスをよろしくお願い申し上げます。
» 1
[6706]Re: <0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:こに | 投稿日:2012/04/17(Tue) 18:26:56
エンコードはUTF-16BE/改行コードCRのままで、
<cSpecialGlyph: 11686 >^Z<cSpecialGlyph:>火
のようにして読み込ませてみてください。
» 2
[6708]Re: <0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:恋次郎 | 投稿日:2012/04/17(Tue) 19:12:03
^Zはキーボードから^とZを入力するものではありません。
OSXのようですので、エディタで文字ビューアから<0x001a>を入力するか、
インデザインでお望みのグリフの入った文字列をタグテキストに書き出して、
それをエディタで見るかして確かめてください。
Jeditでは^Zのように見えますが、miでは違う表示になります。
» 3
[6709]Re: <0xyyyy>タグのUTF-16テキストでの扱いについて | 投稿者:付箋 | 投稿日:2012/04/17(Tue) 19:50:18
皆様さっそくありがとうございます。

タイトルと違って本文では実例を限定してしまい,
混乱を招いてしまった事をお詫び申し上げます。

InDesign添付のタグ付きテキストユーザガイドに
掲載されている「特殊文字用のタグ」をいろいろ利用して
いこうかと思っているところで,恋次郎様にご教示頂いた
方法を試してみたところ確かにうまくいきました。
ただ,この方法ですと例えば1/4スペースを入力する場合,
<0x2005>を指定するようにマニュアルには書いてありますが,
エディタではこの文字列を文字パレットで拾った1つの文字に
置換する作業が発生するわけでしょうか。
(もっともPerl等で一度に置き換えてしまう方法もありますが)

数値を示す文字列が2バイトになるのは致し方ないようなので,
他の方々のご意見も伺ってみて,解決できないようであれば
タグ文字列を文字コードに置き換えていく方法を取ろうと
思います。
» 4
[6713]Re: <0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:お~まち | 投稿日:2012/04/18(Wed) 08:28:40
> <0x2005>を指定するようにマニュアルには書いてありますが,

これはマニュアルが間違ってますね。「0x」は不要です。従って
<cSpecialGlyph:11686><0x001a><cSpecialGlyph:>
ではなくて
<cSpecialGlyph:11686><001a><cSpecialGlyph:>
で読み込めます。

タグ付きテキストユーザガイドはいろいろ間違いが多いので当てになりません。編集データからタグ付テキストに書き出し、それを読み込んでテストしたほうがよいです。それでも書き出したタグ付きテキストをそのまま読み込んでエラーになることもあるので、試行錯誤を覚悟しておいてください。

「特殊文字用のタグ」ですが、タグ付きテキストユーザガイドに頼らず、私の調べたものを利用するほうが安全確実です(なんとまあ極端な我田引水発言!)。

*http://www15.ocn.ne.jp/~preopen/iddomjs/SpecialCharacters.html

余談ですがサロゲートペアの場合、<D800><DC00>でも可能ですし、<010000>でも可能です。5桁ではエラーになるので先頭に0をつけて6桁にしてやる必要があります。

さらに余談ですが読み込ませるとInDesignをダウンさせる文字コード番号があります(絶対に使用しない文字なのでご安心を)。
» 5
[6715]Re: <0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:こに | 投稿日:2012/04/18(Wed) 10:38:13
昨日帰り際に手持ちのタグテキストのコピペで書いたので、^Zの細かい説明を省いてましたが、確かに0x001aのことで、記述はお~まちさんの書かれたように<001a>です。
手持ちのタグテキストはスクリプトかなにかでcSpecialGlyph:の値を変えた文字コード表用のタグテキストでした。
アドビのタグ付きテキスト.pdfはCS2のときからまったく進歩してない&&記述のミスを直してない&&不十分なので、自分でいろいろ試して試行錯誤するしかないです。
» 6
[6717]Re: <0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:付箋 | 投稿日:2012/04/18(Wed) 16:39:15
引き続きコメントを頂きありがとうございます。

お~まち様
JavaScriptのオブジェクトモデル一覧はいつも重宝しております。
さて,ご教示頂いた「<001a>」という文字列をエディタで入力した後流し込んでみましたが,やはりエラーにされ普通の文字列として扱われてしまいました(文字パレットで0x001aに当たる文字をクリックして入力した箇所は問題なく流し込めました)。
また,お知らせ頂いたページの「値」「10進数」を使いたい場合はJavaScriptで対応することになるでしょうか。

こに様
お知らせいただきましてありがとうございました。
タグ付きテキストガイドはCS2~CS5まで持っていますが,確かに直っていないようですね。

結論としては,お~まち様ご提案の
「編集データからタグ付テキストに書き出し、それを読み込んでテストしたほうがよいです。」
という方法を取って出力結果を「真似る」ほうが良さそうですね。
(ただ,それでもトラブルが起きることはありますが)
» 7
[6720]Re: <0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:お~まち | 投稿日:2012/04/18(Wed) 17:15:00
> また,お知らせ頂いたページの「値」「10進数」を使いたい場合はJavaScriptで対応することになるでしょうか。
JavaScript, Apple Script, VBScriptで対応できます。

ところで今 CS5 で試してみましたがInDesignからは「UTF-16BE」に書き出せないですよね。書き出しオプションで選択できる「Unicode」は「UTF-16」(UTF-16 Little-Endian)であって、UTF-16 Big-Endianではありません。そのへんを確認してください。

なお、私はタグ付テキストを扱うときは「Shift_JIS」にしています。シフトJISにない文字があるテキストについては、
 あ → <3042>
のように、シフトJISにない文字を<xxxx>表記に変換してからシフトJISで保存しています。全ての文字を<xxxx>表記にしても問題なくInDesignで読み込めていますので(ただし人間は読めない)、そういう変換プログラムを作っておくのがよいと思います。
» 8
[6729]Re: <0x00xx>タグのUTF-16テキストでの扱いについて | 投稿者:付箋 | 投稿日:2012/04/19(Thu) 00:10:53
お~まち様

重ね重ねありがとうございます。
InDesignがサポートしているUnicode書き出しについては,
トルエンディアンであることは承知しています。
ビッグエンディアンにはJeditで置き換えまして,16進数ダンプで
文字コードを確認する作業をしやすくする便宜的なものでした。
(リトルエンディアンでは0x00が文字コードの次に来てしまうので)
ちなみに,ビッグエンディアン/改行CRでもInDesignに読み込み
ができてはいましたが,昼間ご教示の方法に改めて試してみます。

さて,
>なお、私はタグ付テキストを扱うときは「Shift_JIS」にしています。
>シフトJISにない文字があるテキストについては、
> あ → <3042>
>のように、シフトJISにない文字を<xxxx>表記に変換してから
>シフトJISで保存しています。

実は本業が英語以外の外国語を混植する仕事でして,
当然Unicodeでないと対応できない文字ばかりなので,
もしタグを使わないとこなせない分量の案件ならば,
シフトJISにない文字を<xxxx>表記に置き換えつつタグをつける
スクリプトを組まないとダメですね。
今後の作業に生かしてみたいと思います。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)