2

Silverlightアプリにいくつかのコードページのエンコーディング実装が必要です。特に、zip-archive(Application.GetResourceStreamを開いている)から英語以外のファイル名を読み取る必要があります。

Silverlightには、Unicodeエンコーディング(Encoding.UTF8、Encoding.Unicode、Encoding.BigEndianUnicode)のみが含まれています。Encoding.GetEncodingは、他のエンコーディング名に対して例外をスローします。

ただし、一部のANSIコードページ(特に866)にはエンコーディングクラスの実装が必要です。デスクトップでは、Encoding.GetEncoding(866)を介して取得します。

最も単純な実装はどこで入手できますか?

ps質問がSilverlightにほとんど関係しないことは理解していますが、言及せずにEncoding.GetEncodingを使用することをお勧めします。

4

2 に答える 2

0

http://en.wikipedia.org/wiki/Code_page_866から、マップを作成して、コンテンツをUTF-8に変換できます。

于 2011-05-03T21:43:00.040 に答える
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であることを知っています。

于 2011-05-03T21:48:29.990 に答える