Unicode制御文字(LRO, RLO)でコピー・改変を防止 (構想)

Unicode制御文字のうち、LRO(Left-to-right override, U+202D)とRLO(Right-to-left override, U+202E)は 行中でも文字列の方向を変更する。

1行の中に何度もLROとRLOが入ると、カーソルキーが踊って楽しいことになる。

例: 下のテキストボックスの中の文字列を編集したり、カーソルキーで移動しようとしても上手くできないはず。

※ Edgeは表示が崩れるので、Ctrl + ACtrl + Cでメモ帳にコピペで確認可能。

表示上は普通のいろは順にひらがなが並んでいるように見えるが、 実際のデータはまったく違う順序になっている。

↓通常のテキスト (比較用)

作り方

行内の文字列の順番を入れ替えつつ、LROとRLOを交互に挿入。

以下のMathematicaコードで上記の例を作成した。

StringScrumble[str_String] := Module[{chars, chars2},
  StringJoin[Riffle[(
    chars = ToCharacterCode[#];
    chars2 = Join[{16^^202e}, Riffle[chars, Reverse[chars]]][[1 ;; Length[chars]]];
    FromCharacterCode[Riffle[chars2, {16^^202d, 16^^202e}]]) &
   /@ StringSplit[str, "\n"]
  , StringCases[str, "\n"]]]]

StringScrumble["いろはにほへとちりぬるを\nわかよたれそつねならむ\nうゐのおくやまけふこえて\nあさきゆめみしゑひもせす"]

各種デバイス・アプリでの表示

上記の文章をメールで送信し、各種端末で受信メールで表示してみた。

ChromeやFirefoxなどブラウザは狙い通り表示された。 Edgeはテキストボックス内ではダメだったが、それ以外の場所ではOK。 Outlookでの表示もOK。

iPhoneのメッセージ、メール、GmailはいずれもOK。

テキストエディタについてもどう表示されるか確認した。

メモ帳は意外にもちゃんとBiDi対応だった。 geditは行頭にRLOがあると右寄せで表示してしまう(こういう表示のほうが正しいかもしれないが)。

  • Windows 10
    • Edge:
    • Outlook:
    • メモ帳:
  • Ubuntu 16.04
    • Chrome:
    • Firefox:
    • gedit:
  • iPhone
    • 標準メール:
    • メッセージ:
    • Gmailアプリ:

課題と応用

交互にLROとRLOを入れていく単純な方法では、 文字列方向に「中立」な文字(スペースやカンマ、ピリオド、句読点など)を含む文字列は 上記のMathematicaコードでは上手く表示できない。

もし句読点を含むような通常の文章で、表示される文字列の順序と実際の文字列をバラバラにできれば、 部分的にコピーや編集することが難しくなるので、 メールや文章の無断引用や改ざんをされにくくできるのでは? (検索には引っかからなくなるが)

うまくできそうであればアプリとして公開したい。