Спецификация IMAP (RFC 2060, 5.1.3. Международное соглашение об именах почтовых ящиков) описывает, как для обработки символов, отличных от ASCII, в именах папок. Он определяет модифицированную кодировку UTF-7:
По соглашению международные имена почтовых ящиков указываются с использованием модифицированной версии кодировки UTF-7, описанной в [UTF-7]. Целью этих модификаций является исправление следующих проблем с UTF-7:
UTF-7 использует символ «+» для сдвига; это противоречит обычному использованию «+» в именах почтовых ящиков, в частности, в именах групп новостей USENET.
Кодировка UTF-7 — BASE64, в которой используется символ «/»; это противоречит использованию «/» в качестве популярного разделителя иерархии.
UTF-7 запрещает незакодированное использование «\»; это противоречит использованию «\» в качестве популярного разделителя иерархии.
UTF-7 запрещает незакодированное использование «~»; это противоречит использованию «~» на некоторых серверах в качестве индикатора домашнего каталога.
UTF-7 позволяет использовать несколько альтернативных форм для представления одной и той же строки; в частности, печатные символы US-ASCII могут быть представлены в закодированной форме.
В модифицированном UTF-7 печатные символы US-ASCII, кроме «&», представляют сами себя; то есть символы со значениями октетов 0x20-0x25 и 0x27-0x7e. Символ «&» (0x26) представлен последовательностью из двух октетов «&-».
Все остальные символы (значения октетов 0x00-0x1f, 0x7f-0xff и все 16-битные октеты Unicode) представлены в модифицированном BASE64 с дальнейшим изменением из [UTF-7], в котором вместо «/» используется «,».
Модифицированный BASE64 НЕ ДОЛЖЕН использоваться для представления любого печатного символа US-ASCII, который может представлять сам себя.«&» используется для перехода к модифицированному BASE64 и «-» для возврата к US-ASCII. Все имена начинаются с US-ASCII и ДОЛЖНЫ заканчиваться на US-ASCII (то есть имя, заканчивающееся 16-битным октетом Unicode, ДОЛЖНО заканчиваться знаком «-»).
Прежде чем я начну его реализовывать, мой вопрос: есть ли какой-нибудь код/библиотека .NET (или даже в фреймворке), который выполняет эту работу? Мне не удалось найти ресурсы .NET (только реализации для других языков/фреймворков).
Спасибо!