我有网址http://translate.google.ru/translate_a/t?client=x&text=ввійти вийти&sl=ua&tl=en
如果您将通过此链接作为回复,您将使用正常翻译文本的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();
我如何解密这些数据?
答案 0 :(得分:4)
数据未加密。它是编码的。如果你使用正确的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);
还有其他方法可以做到这一点,但这样你就可以得到很好的打字数据。