Я не могу расшифровать текст - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть URL http://translate.google.ru/translate_a/t?client=x&text=ввійти вийти & sl = ua & tl = ru

Если в ответ вы перейдете по этой ссылке, у вас будет файл js с обычным текстом для перевода:

{"sentences":[{"trans":"enter exit","orig":"ввійти вийти","translit":"","src_translit":"vviy̆ty vyy̆ty"}],"src":"uk","server_time":127}

Но если вы получите эти данные через программу, у вас будет зашифрованный перевод данных:

{"sentences":[{"trans":"\u00D0 \u00B2 \u00D0 \u00B2 \u00D1-\u00D0 \u00B9 \u00D1,
 \u00D0 \u00B8 \u00D0 \u00B2 \u00D0 \u00B8 \u00D0 \u00B9 \u00D1, \u00D0 \u00B8",
"orig":"\u00D0\u00B2\u00D0\u00B2\u00D1?\u00D0\u00B9\u00D1?\u00D0\u00B8 \u00D0\u0
0B2\u00D0\u00B8\u00D0\u00B9\u00D1?\u00D0\u00B8","translit":"","src_translit":""}
],"src":"is","server_time":4}

Через этот код я получил эти данные.

string url = @"http://translate.google.ru/translate_a/t?client=x&text=ввійти вийти&sl=ua&tl=en";
            WebRequest request = WebRequest.Create(url);
            request.Timeout = 5000;
            WebResponse responce = request.GetResponse();
            Stream stream = responce.GetResponseStream();
            StreamReader st = new StreamReader(stream);
            string responsText = st.ReadToEnd();
            Console.WriteLine(responsText);
            Console.ReadLine();

Как мне расшифровать эти данные?

1 Ответ

4 голосов
/ 08 декабря 2011

Данные не зашифрованы. Это закодировано. Если вы используете правильную десериализацию JSON, например, класс DataJsonContractSerializer, это не будет проблемой, потому что среда будет декодировать данные для вас.

[DataContract]
public class TranslationData {
    [DataMember(Name = "sentences")]
    public Sentence[] Sentences { get; set; }

    [DataMember(Name = "src")]
    public string Source { get; set; }

    [DataMember(Name = "server_time")]
    public int ServerTime { get; set; }
}

[DataContract]
public class Sentence {
    [DataMember(Name = "trans")]
    public string Translation { get; set; }

    [DataMember(Name = "orig")]
    public string Original { get; set; }

    [DataMember(Name = "translit")]
    public string Transliteration { get; set; }

    [DataMember(Name = "src_translit")]
    public string SourceTransliteration { get; set; }
}

Затем используйте класс System.Runtime.Serialization.Json.DataContractJsonSerializer для десериализации (необходимо добавить ссылку на сборку System.Runtime.Serialization) для непосредственного чтения из потока ответов:

var serializer = new DataContractJsonSerializer(typeof(TranslationData));
return (TranslationData)serializer.ReadObject(theResponseStream);

Есть и другие способы сделать это, но таким образом вы получите хорошие напечатанные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...