<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>概要</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ROT13</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> の英字にしか効果がなくて、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仮名漢字混じり</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">日本語文</anchor>
にかけても楽しくないわけですわ。</p><p>そこで、 
<time>昭和62(1987)年<attrvalue xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">1987</attrvalue></time>に、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JUNET</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ニュース組</anchor> <code>fj.kanji</code>
とかで議論されて、 ROT13/47 てのが出来上がりました(らしいです)。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 重要な部分を抜粋すると、</p><blockquote><p>アスキー/ローマ字コードは,
エスケープ部分を除いて
rot13します.
JIS漢字コードは
エスケープ部分を除いて
rot47します.</p><p>JIS以外の漢字コードをROT13/47する場合は,JISに変換した後に
上記の操作を行う.
これ以外はROT13/47ではない.</p></blockquote><p>なお、この当時の JUNET の文字コードは今の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO-2022-JP</anchor> 
と同じです。 <code>ESC ( H</code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">瑞典名前文字</anchor>) は既に使われていません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> ROT13/47 は、暗号化と復号の別がありません。
つまり、二度暗号化すれば元に戻ります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> なお、 ROT13/47 策定の過程で、文字を1つ分だけずらす
ROT1 (を漢字に適用したもの) が出てきてます。
あまり面白くないということで没になりました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 仕様確定後すぐ、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nkf</anchor> に実装されてます。 (今でも使えます。)</p></section><section><h1>実装について</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">C</anchor> の場合<pre> rotate47(c)
 char c;
 {
 if ((c &gt;= '!')&amp;&amp;(c &lt;= 'O')) return c+47;
 if ((c &gt;= 'P')&amp;&amp;(c &lt;= '~')) return c-47;
 return c;
 }</pre></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">perl</anchor> の場合 (このままでは使い物にならない。参考まで。)<pre> $c =~ tr/\x21-\x4F\x50-\x7E/\x50-\x7E\x21-\x4F/;</pre></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 現代的には実装は、場合によっては厄介かもしれません。
一度 Unicode に変換されてしまってたら、復号は困難なことも
少なくないでしょう。
(1978年版または1983年版の JIS 漢字コードなので、
Unicode に対応しない空き区点位置が一杯あります。)
(でも大抵は、第1水準漢字が第2水準漢字に化けるだけ
であって大丈夫なのかもしれませんが。)</p><p>いずれにしろ、 Unicode 化されたものを ROT47 するには
表を使って変換するしかないです。止めた方が良いでしょう。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 現代的には、 1990/1997年版とか2000年版の JIS 漢字コード、
あるいは Unicode の文字列を暗号化したいところですが、
上記で定義されたもの「以外はROT13/47でない」って
言ってますからねえ。</p><p>ROT13/47 の拡張てことにします? それもねぇ・・・。
「JIS漢字コード」を拡大解釈して、新しい版の JIS 漢字コード
も含まれてた(!)ことにしちまうのがいい鴨。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <cite xml:lang="en">GitHub - kawabata/rot47</cite>, <time>2023-07-06T14:19:14.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/kawabata/rot47#rot47">https://github.com/kawabata/rot47#rot47</anchor-external></p><blockquote><p>Original ‘rot47’ is based on JIS X 0208:1983, but to avoid undefined character codes, this implementation adopts JIS X 0213:2014 1st plane.</p></blockquote></section><section><h1>識別</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> とかで使う時の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">媒体型</anchor>で、 「text/x-rot13-47」 とか 
「text/x-rot13-47-48」 が使われたりします (でも <code>-48</code> て何?)。
けど、それは何か違うと思うのね。
text/html の ROT13/47 はどーなんですか、って。 </p><p>媒体型は text/* のままで、それに x-rot パラメーターを定義して
使うのが良いと。 (See <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">x-rotパラメーター</anchor>)</p><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><blockquote xmlns="http://www.w3.org/1999/xhtml"><p>Content-Type: text/html; x-rot=&quot;13/47&quot;</p></blockquote><p xmlns="http://www.w3.org/1999/xhtml">って。 </p></delete><p>(でも、要素名も ROT13 で化けたらそれは HTML じゃないよなー。
要素の属性とか内容だけ化かす? それはそれで復号が面倒。
HTML に ROT13/47 なんて、やめましょーよ。)
(それとも、化けてなんぼだから、気にせず要素名とかも化かすのかな?)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> text/* 以外の媒体型に適用するのは、絶対に止めた方が良いと思われます。 
(だから、 Content-Transfer-Encoding や Content-Encoding にするべきではない。)</p><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml">指定方法は冗長だけど、</p><blockquote xmlns="http://www.w3.org/1999/xhtml"><p>Content-Type: text/plain; x-rot=&quot;rot13/47&quot;</p></blockquote><p xmlns="http://www.w3.org/1999/xhtml">にしませう。</p></delete><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">拡張子</anchor>で内容を判別する環境では、 .rot が使われることがあるみたい。
<form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></p></section><section><h1>メモ</h1></section></body></html>