2011-05-03 27 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.