2009-02-20 50 views
3

的IMAP規範(RFC 2060,5.1.3。郵箱國際命名約定)描述如何在文件夾名稱處理非ASCII字符。它定義了一個改性 UTF-7編碼:用於.NET的IMAP文件夾路徑編碼(IMAP 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)由兩個八位字節序列「& - 」表示。

所有其他字符(字節的值 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=en](http://www.google.com/support/forum/p/的Gmail /線程?TID = 79f75c2d2df9e825&HL = EN) – 2011-07-09 15:09:09

回答

2

這太專門化了,不能在框架中出現。雖然我看到許多不完整的「實現」完全不會影響轉換,並且很高興地將所有非us-ascii字符傳遞到IMAP服務器上,但codeplex上可能存在一些問題。

但是我已經實現了這一點,它實際上只有30行代碼。如果字符串落在0x20和0x7e之間的範圍內(不要忘記在「&」之後附加「 - 」),否則會收集所有非us-ascii字符並使用UTF7轉換它們(或UTF8 + base64,我不太確定)用「,」替換「/」。另外,你需要保持「移位狀態」,例如,無論您正在編碼非us-ascii還是輸出us-ascii並在狀態更改時追加過渡令牌「&」和「 - 」。