Base64使用ISO-8859-1字符串解码字符串并将其保存到NSData中

时间:2015-07-16 13:25:51

标签: c# ios character-encoding xamarin base64

这就是我现在所说的:

documentData = new NSData (document.String, NSDataBase64DecodingOptions.None);

这确实有效,但似乎NSData使用UTF-8作为输出字符集。但我需要ISO-8859-1输出字符集中的数据才能获得正确的解码。默认值(UTF-8)失败。

NSData是否有选项,还是我必须使用C#进行转换?

修改

我可以假设ASCII是ISO-8859-1吗?

public static string Base64Decode(string base64EncodedData) {
    if (String.IsNullOrEmpty (base64EncodedData))
            return null;

    var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
    return System.Text.Encoding.ASCII.GetString(base64EncodedBytes);
}

我不相信。

1 个答案:

答案 0 :(得分:2)

我不熟悉NSData,但docs似乎并不表示你可以这样做。

您可以使用C#进行转换:

var isoBytes = Convert.FromBase64String(document.String);
var utf8Bytes = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"),
     Encoding.UTF8, isoBytes);

看起来您可以从工厂方法初始化NSData

var nsData = NSData.FromArray(utf8Bytes);

或者将其转换为base64并使用构造函数:

var base64 = Convert.ToBase64String(utf8Bytes);
var nsData = new NSData(base64, NSDataBase64DecodingOptions.None)