2013年6月9日日曜日

IE 10/Chrome 28:U+202B・U+202Eによる左右反転

制御文字U+202B(RIGHT-TO-LEFT EMBEDDING)やU+202E(RIGHT-TO-LEFT OVERRIDE)がコメントの表示でも左右反転を起こすことは知っていたのですが、ゼロ幅という以外特にメリットも無いと思っていました。最近になってIEとChromeとで挙動に差異があることに気づいたので、あらためて見てみました。

下図のようなブロック文字のコメントを例に挙げます。Lucida化(仮)が絡むとよけいな話になるので、Chromeでもそのままで全角幅で表示されるU+2587・2586・2585・2583・2582です。


先頭にU+202B・202Eを置くと、左右の反転が起きます。これはIEもChromeも変わりません。いずれもゼロ幅なので、見た目では置いてあることがわかりません。


これは特殊文字だからこうなるようで、アルファベットや仮名文字・漢字だとまた挙動が異なります。U+202Bが先頭の場合、一般の文字には反転が起こりません。下図のようにブロック文字の間へ一文字ずつ挟んでみると、アルファベットや仮名文字・漢字はそのままでブロック文字だけ変化が起きました。


左端のU+2587と右端のU+2582だけ、前後が入れ替わっています。またIEでは、アルファベット(というかArial)だとブロック文字にも変化が起きませんでした。

先頭がU+202Eだと一般の文字も反転が起きました。下図の通りブロック文字と一緒に全体が反転しています。ただし、こちらもIEでは一般の文字がArialの場合は何も起きません。


次に、U+202B・202Eを先頭ではなく途中に挟んでみました。


IEでは202Bだと何も起きず、202Eだとそこから後ろだけ左右反転しています。これがOVERRIDEということなのかと思ったら、Chromeではどちらでも同じ変化が起きました。

今度は先頭にU+202B・202Eを置き、途中にU+202A(LEFT-TO-RIGHT EMBEDDING)・U+202D(LEFT-TO-RIGHT OVERRIDE)・U+202C(POP DIRECTIONAL FORMATTING)を置いてみました。なお、これらもゼロ幅です。
202AだとIEでは何も効果が見られず、冒頭と同じように全体が反転します。


Chromeでは202Aより前でだけ反転が起き、かつコメント全体の中でもそれより後ろと位置が反転しています。

一方U+202DだとIEもChromeも同じ挙動になりました。


U+202CもIEとChromeは同じ挙動ですが、上と違ってそれより前でだけ反転が起きました。ちなみにPOP DIRECTIONAL FORMATTINGは、並び方を元の方向に戻すという制御文字だそうです。


IEとChromeで挙動が同じであればやはりメリットはありませんが、組み合わせ方によっては異なるのなら表示の差異を補完するのに使えるかもと思いました。Windows 7でしか試してませんけど。

<参考>HOW TO: Formatting Control Characters - MSDN

2 件のコメント:

OWATA TheEndOfWorld さんのコメント...

いつも調査お疲れ様です。自分は202eと202d使ったこと有りました。が表示互換性を全く考えていない頃なのであまり意味ないですねw http://www.nicovideo.jp/watch/1348061880

bardiel さんのコメント...

どうもです。おもしろいけど逆さになるだけだと意味ないですよねw

コメントを投稿