正确解码c#中包含u003c或u00252等字符串的文本

本文关键字:u00252 字符串 文本 u003c 解码 包含 | 更新日期: 2023-09-27 17:57:52

我有一个JSon响应,其中包含许多''u003c或''u00252或其他类似的字符串。我需要一个合适的函数来把这些字符串解码成合适的字符。

正确解码c#中包含u003c或u00252等字符串的文本

关于如何反序列化JSON字符串,有很多文章。这里展示了一个很好的反序列化通用方法。下面的代码取自此处。

public static T Deserialise<T>(string json)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    obj = (T)serializer.ReadObject(ms); // <== Your missing line
    return obj;
} 
}

重读你的文章后,如果你只是想找到一种将字符串转换为ASCII的方法,那么看看这篇文章。ORoriginal Creadit to@Adam Sills for this code

static string DecodeEncodedNonAsciiCharacters( string value ) {
    return Regex.Replace(
        value,
        @"''u(?<Value>[a-zA-Z0-9]{4})",
        m => {
             return ((char) int.Parse( m.Groups["Value"].Value, NumberStyles.HexNumber )).ToString();
        } );
}

注意,我假设只有字符串的数据部分,而不是整个JSON片段,即

string s = @"blah 'u003c blah 'u00252 blah";

如果上面的假设是错误的,并且您有一个完整的JSON片段,那么只需使用JavaScriptSerializer从数据中获取一个对象。

令人烦恼的是,HttpUtility有编码,但没有解码。

不过,您可以将字符串伪造成一个完整的JSON对象——这似乎有点过头了:

class Dummy
{
    public string foo { get; set; }
}
static void Main(string[] args)
{
    string s = @"blah 'u003c blah 'u00252 blah";
    string json = @"{""foo"":""" + s + @"""}";
    string unencoded = new JavaScriptSerializer().Deserialize<Dummy>(json).foo;
}

我不确定,但我认为您可以直接使用unicode字符代码构建char

char c=''003C'; // c|60 '<'