Правильно декодируйте текст, который содержит строки типа \ u003c или \ u00252 в c # - PullRequest
4 голосов
/ 27 мая 2011

У меня есть ответ JSon, в котором содержится множество строк или других похожих строк. Мне нужна правильная функция для того, чтобы декодировать эти строки в правильные символы.

Ответы [ 3 ]

3 голосов
/ 27 мая 2011

Существуют различные сообщения о том, как десериализовать строки 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, посмотрите это сообщение . ORiginal Creadit для @Adam Sills для этого кода

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();
        } );
}
2 голосов
/ 27 мая 2011

Заметьте, я предполагаю, что у вас просто есть часть данных строки, а не весь фрагмент JSON - т.е.полный фрагмент 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;
}
0 голосов
/ 27 мая 2011

Я не уверен, но я думаю, что вы можете создать char непосредственно с кодом символа Unicode:

char c='\003C'; // c|60 '<'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...