Silverlight的ANSI编码实现

时间:2011-05-03 19:40:25

标签: c# silverlight encoding utf-8 codepages

我需要在Silverlight应用中编译一些代码页的实现。特别是我需要从zip-archive中读取非Engligh文件名(正在打开Application.GetResourceStream)。

Silverlight仅包含Unicode编码(Encoding.UTF8,Encoding.Unicode,Encoding.BigEndianUnicode)。 Encoding.GetEncoding会抛出其他编码名称的异常。

但我需要一些ANSI代码页的Encoding类实现(特别是866)。在桌面上,我通过Encoding.GetEncoding(866)得到它。

我在哪里可以获得最简单的实现?

P.S。我知道这个问题几乎与Silverlight无关,但是没有提及它我会被建议使用Encoding.GetEncoding我猜...

2 个答案:

答案 0 :(得分:0)

http://en.wikipedia.org/wiki/Code_page_866您可以构建地图并将您的资料转换为UTF-8。

答案 1 :(得分: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。