UTF7-IMAP(modified UTF-7)
UTF7-IMAPが正しい表記かはまだ調べてないけど修正UTF-7ともいう.
RFC2060の原文読んだら「modified UTF-7」なので修正UTF-7が正しい.
UTF7-IMAPはmbstring用語.
先日調べたところいまだiconvがサポートしていないのが意外.ホントにサポートしてない?
$ iconv --version iconv (GNU libc) 2.4 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Ulrich Drepper. $ iconv -l|grep -i UTF ISO-10646/UTF-8/ ISO-10646/UTF8/ UTF-7// UTF-8// UTF-16// UTF-16BE// UTF-16LE// UTF-32// UTF-32BE// UTF-32LE// UTF7// UTF8// UTF16// UTF16BE// UTF16LE// UTF32// UTF32BE// UTF32LE//
と疑心暗鬼風に書いてるけどiconvはとても厳格なので,IANAで正しく定義されていないとかで蹴られている予感.
習慣により、国際的なメールボックス名は、[UTF-7] で述べられている UTF-7 符号化の修正版を用いて指定される。これらの修正の目的は、UTF-7 での次の問題を訂正するためである。
1)
UTF-7 は、シフトするために、文字 "+" を用い、これは、メールボックス名、 特にUSENETニュースグループ名での "+" のありふれた使用と衝突する。
2)
UTF-7 の符号化は、文字 "/" を用いる BASE64である; これは、一般的な階層区切りとしての "/" の使用と衝突する。
3)
UTF-7 は、符号化されない "\" の使用を禁じている; これは、一般的な階層区切りとしての "\" の使用と衝突する。
4)
UTF-7 は、符号化されない "~" の使用を禁じている; これは、いくつかのサーバでホームディレクトリを示すものとしての "~" の使用と衝突する。
5)
UTF-7 は、同じ文字列を表現するための、複数の別の形式を許している; 特に、印字可能な US-ASCII 文字が符号化形式で表現され得る。修正 UTF-7 では、印字可能な US-ASCII 文字は、"&" を除いて、 それら自身を表す; つまり、オクテット値 0x20-0x25 と 0x27-0x7e の文字である。文字 "&" (0x26) は、2オクテットの連続 "&-" で表現される。
すみません.日本語が難しいです(照
とりあえずまず7bitだけ適当に見てみる.
ってことでようするに
UTF-7=>[0-9a-zA-Z '(),-\./:?]意外は開始文字「+」+BASE64+終端文字「-」
UTF7-IMAP=>[0-9a-zA-Z -%'-~]意外「&」は「&-」,その他開始文字「&」+BASE64+終端文字「-」
UTF7-IMAPの方がシンプルに見える..
UTF-7
$ php -r 'for ( $i = 0x00; $i < 0x7F; $i++) { printf( "%02XH:%c:%s\n", $i, $i, mb_convert_encoding( sprintf( "%c", $i), "UTF-7", "ASCII"));}' 00H:: 01H::+AAE- 02H::+AAI- 03H::+AAM- 04H::+AAQ- 05H::+AAU- 06H::+AAY- 07H::+AAc- 08H:+AAg- 09H: : 0AH: : 0BH: :+AAs- 0CH::+AAw-
- DH
UTF7-IMAP
$ php -r 'for ( $i = 0x00; $i < 0x7F; $i++) { printf( "%02XH:%c:%s\n", $i, $i, mb_convert_encoding( sprintf( "%c", $i), "UTF7-IMAP", "ASCII"));}' 00H:: 01H::&AAE- 02H::&AAI- 03H::&AAM- 04H::&AAQ- 05H::&AAU- 06H::&AAY- 07H::&AAc- 08H:&AAg- 09H: :&AAk- 0AH: :&AAo- 0BH: :&AAs- 0CH::&AAw- :&AA0- 0EH::&AA4- 0FH::&AA8- 10H::&ABA- 11H::&ABE- 12H::&ABI- 13H::&ABM- 14H::&ABQ- 15H::&ABU- 16H::&ABY- 17H::&ABc- 18H::&ABg- 19H::&ABk- 1AH::&ABo- 1BH:Bs- 1CH::&ABw- 1DH::&AB0- 1EH::&AB4- 1FH::&AB8- 20H: : 21H:!:! 22H:":" 23H:#:# 24H:$:$ 25H:%:% 26H:&:&- 27H:':' 28H:(:( 29H:):) 2AH:*:* 2BH:+:+ 2CH:,:, 2DH:-:- 2EH:.:. 2FH:/:/ 30H:0:0 31H:1:1 32H:2:2 33H:3:3 34H:4:4 35H:5:5 36H:6:6 37H:7:7 38H:8:8 39H:9:9 3AH:::: 3BH:;:; 3CH:<:< 3DH:=:= 3EH:>:> 3FH:?:? 40H:@:@ 41H:A:A 42H:B:B 43H:C:C 44H:D:D 45H:E:E 46H:F:F 47H:G:G 48H:H:H 49H:I:I 4AH:J:J 4BH:K:K 4CH:L:L 4DH:M:M 4EH:N:N 4FH:O:O 50H:P:P 51H:Q:Q 52H:R:R 53H:S:S 54H:T:T 55H:U:U 56H:V:V 57H:W:W 58H:X:X 59H:Y:Y 5AH:Z:Z 5BH:[:[ 5CH:\:\ 5DH:]:] 5EH:^:^ 5FH:_:_ 60H:`:` 61H:a:a 62H:b:b 63H:c:c 64H:d:d 65H:e:e 66H:f:f 67H:g:g 68H:h:h 69H:i:i 6AH:j:j 6BH:k:k 6CH:l:l 6DH:m:m 6EH:n:n 6FH:o:o 70H:p:p 71H:q:q 72H:r:r 73H:s:s 74H:t:t 75H:u:u 76H:v:v 77H:w:w 78H:x:x 79H:y:y 7AH:z:z 7BH:{:{ 7CH:|:| 7DH:}:} 7EH:~:~ 7FH::&AH8-