2009-02-20 3 views
3

Спецификация IMAP (RFC 2060, 5.1.3. Международная конвенция о почтовых ящиках) описывает, как обрабатывать символы, отличные от ASCII, в именах папок. Он определяет модифицированных UTF-7 кодировку:Кодировка пути к папке IMAP (IMAP UTF-7) для .NET?

По соглашению, международный почтовые ящик имен указаны с использованием модифицированной версии кодирования 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) представлен двухоктевой последовательностью «& -».

Всех остальных символы (октет значение 0x00-0x1f, 0x7f-0xff, и все Unicode 16-битных октет) представлены в модифицированной BASE64, с дальнейшей модификацией из [UTF-7], что "" является вместо "/".
Модифицированный BASE64 НЕ ДОЛЖЕН использоваться для представления любого печатного символа US-ASCII , который может представлять себя.

«&» используется для перехода к модифицированным BASE64 и «-» для возврата в US-ASCII. Все имена начинаются в US-ASCII, и ДОЛЖНЫ заканчиваться в US-ASCII (то есть имя, заканчивающееся октетом Unicode 16 бит , ДОЛЖНО заканчиваться символом «-»).

Прежде чем я начну ее реализации, на мой вопрос: есть ли какой-нибудь .NET код/​​библиотека там (или даже в рамках), что делает работу? Я не смог найти ресурсы .NET (только implementations for other languages/frameworks).

Спасибо!

+0

У меня была та же проблема. Подробно здесь .... [http://www.google.com/support/forum/p/gmail/thread?tid=79f75c2d2df9e825&hl=ru (http://www.google.com/support/forum/p/ Gmail/нить? TID = 79f75c2d2df9e825 & гл = еп) – 2011-07-09 15:09:09

ответ

2

Это слишком специализированный, чтобы присутствовать в каркасе. Возможно, что-то на Codeplex, хотя многие неполные «реализации», которые я видел, вообще не беспокоятся о конверсии и с удовольствием передадут все символы non-us-ascii на сервер IMAP.

Однако я реализовал это в прошлом, и это действительно всего 30 строк кода. Вы просматриваете все символы в строке и выводите их, если они попадают в диапазон между 0x20 и 0x7e (не забудьте добавить «-» после «&»), иначе собрать все не-us-ascii и конвертировать их с помощью UTF7 (или UTF8 + base64, я здесь не совсем уверен), заменив «/» на «,». Кроме того, вам необходимо поддерживать «смещенное состояние», например. в настоящее время вы кодируете non-us-ascii или выводите us-ascii и добавляете токены перехода «&» и «-» при изменении состояния.

Смежные вопросы