/[pub]/suikawiki/sw4data/ids/2/650.txt
Suika

Contents of /suikawiki/sw4data/ids/2/650.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations) (download)
Thu Jan 19 13:58:50 2012 UTC (12 years, 10 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +12 -5 lines
File MIME type: text/plain
updated by (anon)

1 [3] [DFN[[[UTF-1]]]] ([DFN[UCS Transformation Format One]]) は、 [[ISO/IEC 10646]]
2 の[[符号化方式]]の一種です。
3
4 [4] [[ISO/IEC2022]] の CL, SP, DEL, CR の符号位置の意味を変えない
5 ってのが売りだったらしい。
6
7 ISO/IEC 10646-1:1993 の附属書 G に載ってた。
8 だけどすぐに、 ISO/IEC 10646 からは削除されちまった。
9
10 もう誰にも相手してもらえない。かわいそうに。
11
12 [[UCS-4]] の文字を1〜5オクテットの可変長で表現。
13 [[UTF-8]] が1〜6オクテットなのに比べると、少し短くなるんだ。
14
15 割算を使うのが嫌われたらしい。
16 それから、 ASCII 非互換 (下記参照) なのとか、
17 [[UTF-8]] とは違って途中から文字区切りを探せないとか。
18
19 [[IANA]] 登録簿の名前: ISO-10646-UTF-1, csISO10646UTF1
20
21 [[ISO-IR]] の登録番号は 178。登録簿には UTF-1 の仕様が載ってます。
22 <http://www.itscj.ipsj.or.jp/ISO-IR/178.pdf>
23 ESC 2/5 4/2 (%B)
24
25
26 * ASCII の上位互換なの?
27
28 [[ASCII]] の文書はそのまま UTF-1 に持ってこれるけど、
29 [[シフトJIS]] みたいに2オクテット目以降に
30 0x00-7F のどれかが来るって意味では、 ASCII 互換じゃない。
31 (これはイタいね。)
32
33
34 * UCS-4 → UTF-1
35
36 [PRE[
37 sub u4code2u1code ($) {
38 my $U = shift;
39 return ($U) if $U <= 0x9F;
40 return (0xA0, $U) if $U <= 0xFF;
41 return (0xA1 + ( $U - 0x100 ) / 0xBE,
42 T( ( $U - 0x100 ) % 0xBE)) if $U <= 0x4015;
43 return (0xF6 + ( $U - 0x4016 ) / ( 0xBE**2 ),
44 T( ( $U - 0x4016 ) / 0xBE % 0xBE),
45 T( ( $U - 0x4016 ) % 0xBE )) if $U <= 0x38E2D;
46 return (0xFC + ( $U - 0x38E2E ) / ( 0xBE**4 ),
47 T( ( $U - 0x38E2E ) / ( 0xBE**3 ) % 0xBE),
48 T( ( $U - 0x38E2E ) / ( 0xBE**2 ) % 0xBE),
49 T( ( $U - 0x38E2E ) / 0xBE % 0xBE),
50 T( ( $U - 0x38E2E ) % 0xBE ));
51 }
52 ]PRE]
53
54 [PRE[
55 sub utf1code2ucs4code (@) {
56 my ($x, $y, $z, $v, $w) = @_;
57 return $x if @_ == 1 && $x <= 0x9F;
58 return $y if $x == 0xA0;
59 return ($x - 0xA1) * 0xBE + U($y) + 0x100
60 if 0xA1 <= $x && $x <= 0xF5;
61 return ($x - 0xF6) * ( 0xBE**2 ) + U($y) * 0xBE + U($z) + 0x4016
62 if 0xF6 <= $x && $x <= 0xFB;
63 return ($x - 0xFC) * ( 0xBE**4 ) + U($y) * ( 0xBE**3 )
64 + U($z) * ( 0xBE**2 ) + U($v) * 0xBE
65 + U($w) + 0x38E2E;
66 }
67 ]PRE]
68
69 [PRE[
70 sub T ($) {
71 my $z = shift;
72 return $z + 0x21 if $z <= 0x5D;
73 return $z + 0x42 if $z <= 0xBD;
74 return $z - 0xBE if $z <= 0xDE;
75 return $z - 0x60;
76 }
77 ]PRE]
78
79 [PRE[
80 ## T(z) の逆関数
81 sub U ($) {
82 my $z = shift;
83 return $z + 0xBE if $z <= 0x20;
84 return $z - 0x21 if $z <= 0x7E;
85 return $z + 0x60 if $z <= 0x9F;
86 return $z - 0x42;
87 }
88 ]PRE]
89
90
91 * UTF-1 の正規表現 (手抜き)
92
93 [PRE[
94 qr/[\x00-\x9F]|[\xA0-\xF5].|[\xF6-\xFB]..|[\xFC-\xFF]..../
95 ]PRE]
96
97
98 * Perl 実装
99
100 そもそも UTF-1 の実装なんて見たことないんですが(笑)、
101 面白そうだし RFC 1808 の追悼(謎)の意をこめて、
102 作ってみました。
103
104 Encode::Unicode::UTF1
105 <http://suika.fam.cx/gate/cvs/perl/lib/Encode/Unicode/UTF1.pm>
106
107 perl 5.8 とかの、 Encode module が動く perl でないと駄目です。
108
109 * 関連
110
111 [2] 昔の資料だと単に ''UTF'' と書かれていることもある。まさか今のように数多の [[UTF]] が登場するとは思ってもいなかったでしょうな。 ([[Unicode]] は既に UTF しか存在しないし。藁)
112
113 [5] [[UTF-8]] は当初は [[UTF-1]] とは別の [[UTF]] という意味で [[UTF-2]] とも呼ばれていました。
114
115 * メモ
116
117 - [1] [[ビット組合せ]]についての ISO/IEC 2022 との親和性もあって、 [[IETF]] はメイル規格とかに採用する案もあったらしいが・・・。丸ごとぽしゃった。

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24