株式会社オズビジョンのユッコ (@terra_yucco) です。
きょうのネタ
某社から受信したセミナーの案内メールに謎の文字が見えた。
謎の文字
実メール
あちこち伏せてますが、あちこちに L SEP が登場しています。
これは何なのか?
調べてみたところ、改行コードの一種。
改行コードのいろいろな種類
LF, CRLF, CR くらいしか知らなかったのですが、歴史的なことも含めるとかなりいろいろなパターンがあったようです。
愛用のサクラエディタでもそのあたりの入力ができたようで二度衝撃。
入力改行コード指定
以下の表は上記リンク先から引用して整形したものです。
種類 | 説明 | 表記 |
---|---|---|
CRLF | Windows/DOS で一般的な改行コード |
U+000D U+000A , \r\n
|
LF (Line Feed) | Unix/Linux で一般的な改行コード |
U+000A , \n
|
CR (Carriage Return) | 旧 MacOS で一般的な改行コード |
U+000D , \r
|
NEL (Next Line) | Unicode の Next Line | U+0085 |
LS (Line Separator) | Unicode の行区切り文字 | U+2028 |
PS (Paragraph Separator) | Unicode の段落区切り文字 | U+2029 |
改行コードについて
取り扱える改行コード
CR00LF00 ( 0d 00 0a 00 ) 廃止しました。(sakura:1.3.4.1)
LFCR ( 0a 0d ) 廃止しました。(sakura:2.0.0.0)
(Д) ゜゜
世の中は広いです。
共通設定 『編集』プロパティ
この設定をすることで、サクラエディタでも簡単に各種特殊改行コードで遊べそうだったので、やってみました。
画像は上記ページから拝借しています。
その他 > 改行コード NEL, PS, LS を有効にする (O) にチェック。
この設定をすると、下部ステータスバーを右クリックしたときに選べる選択肢が以下のように増えます。
いろいろな改行コードを表示させてみる
環境など
- Windows 10 Home
- Google Chrome 74.0.3729.131 (Official Build) (64 bit)
CRLF, LF, CR
どれも無難に解釈してくれて特に面白いことはなかったです。
LS
冒頭の L SEP が再現されました。なお、この四角のことを豆腐 (Tofu) って言うそうです。
PS
Tofu が P SEP になりました。
NEL
Chrome にサジを投げられたのか、文字の入らない Tofu になりました。
Tofu を防ぐには
上記の結果から考えるに、きっかけのセミナーメールを書いた方は、何らかで LS が入力されるツールを使っていたのだろうと思います。
(その割には入っていた場所と入っていない場所があったりしたのが謎)
例えばメール送信ツールに以下のようなコードが噛まされていたら、きっとみんな幸せになったんだろうな、という話。
<?php
if ($argc < 2) {
return;
}
$text = file_get_contents($argv[1]);
$hex = bin2hex($text);
$target = [
'e280a8', // LS
'e280a9', // PS
'c285', // NEL
];
file_put_contents(
$argv[1] . '.removed',
hex2bin(str_replace($target, '', $hex))
);
※一度 16 進数文字列に変換して置換し、再度戻すという力技なので、もっといい方法があるよ、というコメントお待ちしております!