正确解码c#中包含u003c或u00252等字符串的文本
本文关键字:u00252 字符串 文本 u003c 解码 包含 | 更新日期: 2023-09-27 17:57:52
我有一个JSon响应,其中包含许多''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 '<'