6

IMAP 仕様 ( RFC 2060、5.1.3. Mailbox International Naming Convention) では、フォルダ名で非 ASCII 文字を処理する方法が説明されています。変更されたUTF-7 エンコーディングを定義します。

慣例により、国際メールボックス名は、[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 オクテットのシーケンス「&-」で表されます。

他のすべての文字 (オクテット値 0x00-0x1f、0x7f-0xff、およびすべての Unicode 16 ビット オクテット) は、"/" の代わりに "," が使用されるという [UTF-7] からのさらなる変更を加えて、変更された BASE64 で表されます。
変更された BASE64 は、それ自体を表すことができる印刷 US-ASCII 文字を表すために使用してはなりません。

"&" は、修正された BASE64 にシフトするために使用され、"-" は、US-ASCII にシフトするために使用されます。すべての名前は US-ASCII で始まり、US-ASCII で終わる必要があります (つまり、Unicode 16 ビット オクテットで終わる名前は「-」で終わる必要があります)。

実装を開始する前に、私の質問: ジョブを実行する.NET コード/ライブラリがそこに (またはフレームワーク内にさえ) ありますか? .NET リソースが見つかりませんでした (他の言語/フレームワークの実装のみ)。

ありがとうございました!

4

3 に答える 3

2

これは特殊すぎて、フレームワークに含めることができません。コードプレックスには何かがあるかもしれませんが、私が見た多くの不完全な「実装」は変換をまったく気にせず、すべての非us-ascii文字を喜んでIMAPサーバーに渡します。

ただし、これは過去に実装したことがあり、実際にはわずか 30 行のコードです。文字列内のすべての文字を調べて、それらが 0x20 から 0x7e の範囲にある場合はそれらを出力します (「&」の後に「-」を追加することを忘れないでください)。それ以外の場合は、すべての非 us-ascii を収集し、UTF7 を使用して変換します(またはUTF8 + base64、ここではよくわかりません)「/」を「、」に置き換えます。さらに、「シフトされた状態」を維持する必要があります。たとえば、現在 non-us-ascii をエンコードしているか、us-ascii を出力しているかに関係なく、状態変化時に遷移トークン「&」と「-」を追加します。

于 2009-02-20T14:04:59.090 に答える