UTF-7

概要

UTF-7はUNICODEを演算を行い7ビットに変換したものです。タブ、改行コード、スペース、数字、アルファベット、「'(),-./:?」を除いてBASE64であらわされます。

実装

SHIFT_JISへ変換

UTF-7を下記の方法でUNICODEに変換します。UNICODEからSHIFT_JISへの変換はWindowsのAPIを用いて行います。

BASE64は例えば「IWM」はI=8、W=22、M=12となり、それぞれを6ビットの2進数で表記すると、I=001000、W=010110、M=001100となります。それらを4ビットごとに合わせると0010 0001 0110 0011 00となります。余った2ビットは破棄され、UNICODEは2進数で0010000101100011、16進数で2163hとなります。UNICODEの1文字がBASE64の3文字に相当するのではなく、文字が続く場合には前の余ったビットの部分から使います。UNICODEで3文字がBASE64では8文字になります。

SHIFT_JISから変換

SHIFT_JISからUNICODEへのWindowsのAPIを用いて行います。UNICODEを下記の方法でUTF-7に変換します。

例えば「岩本一樹」はUNICODEでは5CA9h、672Ch、4E00h、6A39hとなり、これを2進数であらわすと、0101 1100 1010 1001 0110 0111 0010 1100 0100 1110 0000 0000 0110 1010 0011 1001となります。さらにこれを余ったビットに0を加えて6ビットづつに区切ると010111 001010 100101 100111 001011 000100 111000 000000 011010 100011 100100となります。これをBASE64であらわすと「XKlnLE4Aajk」になります。

判別

ファイルを先頭から解析して、下記の条件をすべて満たすときにはUTF-7と判定します。


戻る