Windows Phone 8从base64 iso 8859-2编码文本获取字符串 [英] Windows Phone 8 getting string from base64 iso 8859-2 encoded text

查看:228
本文介绍了Windows Phone 8从base64 iso 8859-2编码文本获取字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有base64编码的字符串,结果是在iso-8859-2编码,我需要从中获得字符串。

I have base64 encoded string, result being in iso-8859-2 encoding and I need to get the string from it.

8 C#/ XAML .NET 4.5 App。

I'm woking on windows Phone 8 C#/XAML .NET 4.5 App.

我现在做的是:

    private string decodeXML(string xml)
    {
        byte[] data = Convert.FromBase64String(xml); //I decode the base64 data

        string decoded = Encoding.UTF8.GetString(data, 0, data.Length); 
        //and here get a string from it using UTF8, problem being the data are in "iso-8859-2"
        return decoded;
    }

所以我试过:

   private string decodeXML(string xml)
    {
        byte[] data = Convert.FromBase64String(xml);
        string decoded = Encoding.GetEncoding("iso-8859-2").GetString(data, 0, data.Length); 
        return decoded;
    }

但我得到一个异常

System.ArgumentException was unhandled by user code
HResult=-2147024809
Message='iso-8859-2' is not a supported encoding name.
Parameter name: name
Source=mscorlib
ParamName=name
StackTrace:
   at System.Globalization.EncodingTable.internalGetCodePageFromName(String name)
   at System.Globalization.EncodingTable.GetCodePageFromName(String name)
   at System.Text.Encoding.GetEncoding(String name)
   .....and the rest of the stack trace...

如何获取字符串,并保留特殊字符?

How should I get the string from it with special characters preserved? (which way to use to get the string from it?)

推荐答案

这里是从 ISO 8859-2 更改为 String 未测试:

    private readonly ushort[] iso8859_2 = {
        0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 0x00A8, 0x0160, 
        0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, 0x00B0, 0x0105, 0x02DB, 0x0142, 
        0x00B4, 0x013E, 0x015B, 0x02C7, 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 
        0x017E, 0x017C, 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 
        0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 0x0110, 0x0143, 
        0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 0x0158, 0x016E, 0x00DA, 0x0170, 
        0x00DC, 0x00DD, 0x0162, 0x00DF, 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 
        0x0107, 0x00E7, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 
        0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F, 
        0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 };

    private string decodeXML(string xml)
    {
        byte[] data = Convert.FromBase64String(xml);
        char[] decoded = new char[data.Length];

        for (int i = 0; i < data.Length; i++)
            if (data[i] < 128)
                decoded[i] = (char)data[i];
            else if (data[i] < 0xA0)
                decoded[i] = '\0';
            else
                decoded[i] = (char)iso8859_2[data[i] - 0xA0];

        return new string(decoded);
    }

这篇关于Windows Phone 8从base64 iso 8859-2编码文本获取字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆