ちくちく日記

DTP系備忘録。真面目にやってます。

InDesignの正規表現検索置換で文字化け

なんかこういうネタって、もう詳しい人(大石さんとかせうぞーさんとか)がとっくにやってるような気がしなくもないのだけど、気がついたからメモ。


フォントが持っている文字(キャラクタ)のなかには、文字コードがふられておらず、CIDのみを持つ文字というのがある。

たとえば、モリサワ A-OTF 新ゴ Proでの丸数字㉑以降。

▲CIDはあるけど、文字コードはふられていない

ちなみに、モリサワのProフォントでは丸数字に関して、Unicode3.2に準拠したPr5以降では㉑以降の文字にもコードがふられているが、3.0準拠のProでは降られていない。(参考:なんでやねんDTP 丸数字とユニコード

こういう、文字コードを持たない文字がある状態で、InDesign正規表現検索置換を書けてみる。

ここでは、検索文字列に (.) 、置換文字列に $1★ とした。
(.)で、文字1文字を検索し、 $1★でそのマッチした文字($1)の後に★を入れる、つまりすべての文字の後に★を入れるという置換。


▲文字の後に★を入れる、という正規表現置換

期待する結果としては


▲こうなるはず。

ところがこれを実行すると。

▲こうなります。

CIDしかもたない文字(キャラクタ)に正規表現検索置換をかけると文字化けする。
多分、InDesign正規表現の置換で、マッチした文字の文字コードを($1)の中に保持してるのだけど、その文字コードがない文字なので、うまくいかないのだと思う。



ところでこの文字列のフォントA-OTF 新ゴ ProをA-OTF 新ゴ Pr5に変更するとどうなるか。


▲書体変更 新ゴ Pro→新ゴ Pr5

書体変更した文字列を字形パレットでみてみると、Pr5では㉑以降の丸数字にもちゃんとコードがふられているので、字形パレット上で、文字コードをもつ文字として認識されている


Unicodeが指定されている。

が、同じように正規表現置換を欠けると
あれっ、化けた!

▲文字化けしてしまった

ためしに今度は㉑から㉖まで新ゴ Pr5で打ち直したテキストで置換してみる
今度は正常に置換された。


▲正しく置換。


ついでに、この文字をそれぞれテキストエディタにペーストしてみよう。


InDesign上で打ち込んだ文字


テキストエディタ(mi)にペースト


みてのとおり、新ゴProで打ち込んだCIDしか持たない文字は「1A」という文字に化けています。これはInDesign内部で独自の文字に変換させているのだと考えられます。
さらに、新ゴProで打った文字列を新ゴPro5に置き換えた物も、「1A」表示です。これも考えてみれば当たり前の話で、書体を変更したからといって、文字(キャラクタ)そのものが変わるはずがない。だから、当然他のアプリケーションにコピペすれば「1A」表示です。

だけど不思議なのは、文字コードのない文字が指定されているにも関わらず、字形パレットでは違う文字情報が表示される不思議!


Unicodeが指定されてるという表示なの…

字形パレット上ではUnicode3251が表示されてたけど、実際は文字コードのない文字が入力されている。

うん、ややこしくなってきたね!

つまりInDesignは、Pro→Pr5にフォントが変更になったとき、自動的にCIDが一致する字形に置き換えてくれたんだね。でもそれはあくまで字形だけの問題なので、文字コードまで置き換えたわけではない。で、本来なら字形パレットでは、CIDをもっていて、文字コードがないという状態表示が適切だと思うのだけど、字形パレットではこの文字はユニコードを持つ文字として表示されている。

と、いうか字形パレットって別に今選択している文字キャラクタが表示されているという訳ではないんだな。
多分字形パレットは、そのフォントのCIDから情報を引っ張ってそれを表示しているだけで、選択している文字の文字コードを表示しているわけではない。
なので、こういう食い違いが生じるのだと思う。


と、いうことで、注意点二つ

■字形パレットの文字コード表示は必ずしも正しいとは限らない。
正規表現検索置換をかけるときは、必ず置換された箇所を確認しないと、思わぬ文字化けが生じている可能性がある。


まぁ、字形パレットでの表示についてはビミョーな話すぎて、修正してよというほどのものではないけど、正規表現の方はヤバすぎんだろ。置換できないならともかく文字化けさせてくれるのはしゃれにならない。


多分InDesign正規表現検索置換ではCIDしか持たない文字があるなんていう日本語特有の事例までは想定していないのだと思う。マイナー言語の悲しさですな。
と、いうことで、日本語で正規表現検索置換をするときは、思わぬ文字化けを避けるため、置換した箇所を全部くまなくチェックしましょう。

それなら始めからこの機能使わず、ひとつひとつ手作業変換したほうがいいかもねっ☆