2011-05-03 61 views
2

我需要在我的Silverlight應用程序中編碼實現某些代碼頁。特別是我需要從zip-archive中讀取非Engligh文件名(正在打開Application.GetResourceStream)。Silverlight的ANSI編碼實現

Silverlight只包含Unicode編碼(Encoding.UTF8,Encoding.Unicode,Encoding.BigEndianUnicode)。 Encoding.GetEncoding爲其他編碼名稱引發異常。

但我需要一些ANSI代碼頁(特別是866)的Encoding類實現。在桌面上,我會通過Encoding.GetEncoding(866)獲取它。

我在哪裏可以得到最簡單的實現?

p.s.我明白,這個問題幾乎沒有涉及Silverlight,但沒有提到它,我會建議使用Encoding.GetEncoding我猜..

+0

@Bala R:謝謝!它變得很容易。我希望你回答爲「回答」而不是評論。 – Shrike 2011-05-03 21:42:08

+0

世界上「ANSI」是什麼意思? – tchrist 2011-05-05 01:39:55

+0

@tchrist這意味着「ANSI代碼頁」或「Windows代碼頁」。請參閱http://en.wikipedia.org/wiki/Windows_code_page – Shrike 2011-05-06 10:27:48

回答

0

感謝@Bala_R,我得到866代碼頁寫:

private byte[] translateInto866(string fileName) 
    { 
     const byte startCode1 = 128;  // А, 0410 
     const byte startCode2 = 224;  // р, 0440 

     var result = new byte[fileName.Length]; 
     int i = 0; 
     foreach (char c in fileName) 
     { 
      if (c >= 'А' && c <= 'п') 
      { 
       result[i] = (byte)(((byte)(c - 'А')) + startCode1); 
      } 
      else if (c > 'п' && c <= 'я') 
      { 
       result[i] = (byte)(((byte)(c - 'р')) + startCode2); 
      } 
      else 
      { 
       result[i] = (byte) c; 
      } 
      i++; 
     } 
     return result; 
    } 

現在,我們只需要明白的是用於編碼的文件名是什麼代碼頁。我們在清單中使用unicode表示形式,並在zip內部使用某種編碼方式表示。找到合適的編碼應該不是很難。但在我的情況,我只知道,如果它不是utf8那麼它是866.