<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><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> <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-1</anchor></dfn> (<dfn>UCS Transformation Format One</dfn>) は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10646</anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化方式</anchor>の一種です。</p><section><h1>特徴</h1><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC2022</anchor> の CL, SP, DEL, CR の符号位置の意味を変えない
ってのが売りだったらしい。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10646-1:1993</anchor> の附属書 G に載ってた。
だけどすぐに、 ISO/IEC 10646 からは削除されちまった。</p><p>もう誰にも相手してもらえない。かわいそうに。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UCS-4</anchor> の文字を1〜5オクテットの可変長で表現。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> が1〜6オクテットなのに比べると、少し短くなるんだ。</p><p>割算を使うのが嫌われたらしい。
それから、 ASCII 非互換 (下記参照) なのとか、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> とは違って途中から文字区切りを探せないとか。</p></section><section><h1>エスケープシーケンス</h1><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> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO-IR</anchor> の登録番号は 178。登録簿には UTF-1 の仕様が載ってます。</p><ul><li><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-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="http://www.itscj.ipsj.or.jp/ISO-IR/178.pdf">http://www.itscj.ipsj.or.jp/ISO-IR/178.pdf</anchor-external><ul><li>消滅確認 <time>2022-05-09T09:40:31.200Z</time></li><li><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> <cite>00000001.PDF - 178.pdf</cite>, <time>2021-05-21T08:10:48.000Z</time>, <time>2022-05-09T09:40:02.953Z</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://www.itscj-ipsj.jp/ir/178.pdf">https://www.itscj-ipsj.jp/ir/178.pdf</anchor-external></li></ul></li></ul><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> 
ESC 2/5 4/2 (%B)</p><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> 
<time>1993-01-21</time>登録、
<time>1995-06-08</time>改正 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">標準復帰</anchor> <code class="charname" xml:lang="en">ESC</code> <code>U+0025</code> <code>U+0040</code>
で
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor> に切り替えることができます。</p><p><sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>ISO/IEC 10646におけるエスケープシーケンス</anchor> </sw-see></p></section><section><h1>ASCII の上位互換なの?</h1><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> の文書はそのまま UTF-1 に持ってこれるけど、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">シフトJIS</anchor> みたいに2オクテット目以降に
0x00-7F のどれかが来るって意味では、 ASCII 互換じゃない。
(これはイタいね。)</p></section><section><h1>文脈</h1><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:">RFC 1505</anchor> が使っていました。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><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"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1505</anchor> - Encoding Header Field for Internet Messages</cite>, <time>2022-05-09T09:43:09.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://datatracker.ietf.org/doc/html/rfc1505.txt#section-3.1">https://datatracker.ietf.org/doc/html/rfc1505.txt#section-3.1</anchor-external></li></ul></refs></section><section><h1>UTF-1 の正規表現 (手抜き)</h1><pre> qr/[\x00-\x9F]|[\xA0-\xF5].|[\xF6-\xFB]..|[\xFC-\xFF]..../</pre></section><section><h1>IANA charset</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IANA登録簿</anchor>の名前: 
<dfn><code>ISO-10646-UTF-1</code></dfn>, 
<dfn><code>csISO10646UTF1</code></dfn></p></section><section><h1>Perl 実装</h1><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> 
そもそも UTF-1 の実装なんて見たことないんですが(笑)、
面白そうだし 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1505</anchor> の追悼(謎)の意をこめて、
作ってみました。</p><section><h1>UCS-4 → UTF-1</h1><pre> sub u4code2u1code ($) {
   my $U = shift;
   return ($U) if $U &lt;= 0x9F;
   return (0xA0, $U) if $U &lt;= 0xFF;
   return (0xA1 + ( $U - 0x100 ) / 0xBE,
           T(     ( $U - 0x100 ) % 0xBE)) if $U &lt;= 0x4015;
   return (0xF6 + ( $U - 0x4016 ) / ( 0xBE**2 ),
           T(     ( $U - 0x4016 ) / 0xBE % 0xBE),
           T(     ( $U - 0x4016 ) % 0xBE      )) if $U &lt;= 0x38E2D;
   return (0xFC + ( $U - 0x38E2E ) / ( 0xBE**4 ),
           T(     ( $U - 0x38E2E ) / ( 0xBE**3 ) % 0xBE),
           T(     ( $U - 0x38E2E ) / ( 0xBE**2 ) % 0xBE),
           T(     ( $U - 0x38E2E ) /   0xBE      % 0xBE),
           T(     ( $U - 0x38E2E ) %   0xBE      ));
 }</pre><pre> sub utf1code2ucs4code (@) {
   my ($x, $y, $z, $v, $w) = @_;
   return $x if @_ == 1 &amp;&amp; $x &lt;= 0x9F;
   return $y if $x == 0xA0;
   return ($x - 0xA1) * 0xBE + U($y) + 0x100
     if 0xA1 &lt;= $x &amp;&amp; $x &lt;= 0xF5;
   return ($x - 0xF6) * ( 0xBE**2 ) + U($y) * 0xBE + U($z) + 0x4016
     if 0xF6 &lt;= $x &amp;&amp; $x &lt;= 0xFB;
   return ($x - 0xFC) * ( 0xBE**4 ) + U($y) * ( 0xBE**3 )
              + U($z) * ( 0xBE**2 ) + U($v) * 0xBE
              + U($w) + 0x38E2E;
 }</pre><pre> sub T ($) {
   my $z = shift;
   return $z + 0x21 if $z &lt;= 0x5D;
   return $z + 0x42 if $z &lt;= 0xBD;
   return $z - 0xBE if $z &lt;= 0xDE;
   return $z - 0x60;
 }</pre><pre> ## T(z) の逆関数
 sub U ($) {
   my $z = shift;
   return $z + 0xBE if $z &lt;= 0x20;
   return $z - 0x21 if $z &lt;= 0x7E;
   return $z + 0x60 if $z &lt;= 0x9F;
   return $z - 0x42;
 }</pre><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
perl 5.8 とかの、 Encode module が動く perl でないと駄目です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
Encode::Unicode::UTF1
<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://suika.suikawiki.org/gate/cvs/perl/lib/Encode/Unicode/UTF1.pm">https://suika.suikawiki.org/gate/cvs/perl/lib/Encode/Unicode/UTF1.pm</anchor-external></p></section></section><section><h1>廃止</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> 
<time>1996-10-15</time>に発行された
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10646-1:1993</anchor>/Amd.4:1996
で削除されました。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Korean mess</anchor> より前なので、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode 1.1</anchor> 相当の時代だけで終わりました。
現行の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> で使われたことは(仕様上は)ありませんでした。</comment-p></section><section><h1>関連</h1><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> 昔の資料だと単に <em>UTF</em> と書かれていることもある。まさか今のように数多の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF</anchor> が登場するとは思ってもいなかったでしょうな。 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> は既に UTF しか存在しないし。藁)</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:">UTF-8</anchor> は当初は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-1</anchor> とは別の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF</anchor> という意味で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-2</anchor> とも呼ばれていました。</p></section><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:">ビット組合せ</anchor>についての ISO/IEC 2022 との親和性もあって、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> はメイル規格とかに採用する案もあったらしいが・・・。丸ごとぽしゃった。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1505</anchor> のことかな? それとも他にもあったのかな?</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite xml:lang="en">draft-ullmann-net-utf-00</cite>, <time>2023-07-16T12:54:37.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://datatracker.ietf.org/doc/html/draft-ullmann-net-utf-00">https://datatracker.ietf.org/doc/html/draft-ullmann-net-utf-00</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;22</anchor-internal> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DIS 10646-1.2</anchor> 時代の Annex F (G でなくて) を引いていますが、
後の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-1</anchor> と同じものでしょうか?</p></section></body></html>