【问题标题】:Implementing Google transliterate API using REST and C#, facing unicode and parsing issues使用 REST 和 C# 实现 Google 音译 API,面临 unicode 和解析问题
【发布时间】:2012-08-05 09:57:08
【问题描述】:

我一直在尝试使用 RESTful 方法使用 Google Transliterate API,因为它很容易通过服务器端语言(此处为 C#)来实现。

所以,我遇到了这种 URL 格式:http://www.google.com/transliterate/indic?tlqt=1&langpair=en|hi&text=bharat%2Cindia&tl_app=3,它以以下格式返回 JSON:

[
{
"ew" : "bharat",
"hws" : [
"भारत","भरत","भरात","भारात","बहरत",
]
},
{
"ew" : "india",
"hws" : [
"इंडिया","इन्डिया","इण्डिया","ईन्डिया","इनडिया",
]
},
] 

我尝试HttpWebRequestHttpWebResponse 来获取 JSON,但它在 Web 浏览器上以 Unicode 格式返回值,例如:

[ { "ew" : "bharat", "hws" : [ "\u092D\u093E\u0930\u0924","\u092D\u0930\u0924","\u092D\u0930\u093E\u0924","\u092D\u093E\u0930\u093E\u0924","\u092C\u0939\u0930\u0924", ] }, { "ew" : "india", "hws" : [ "\u0907\u0902\u0921\u093F\u092F\u093E","\u0907\u0928\u094D\u0921\u093F\u092F\u093E","\u0907\u0923\u094D\u0921\u093F\u092F\u093E","\u0908\u0928\u094D\u0921\u093F\u092F\u093E","\u0907\u0928\u0921\u093F\u092F\u093E", ] }, ]

所以,我应用了这个article 并通过它传递了 JSON 字符串,它返回了:

[ { "ew" : "bharat", "hws" : [ "भारत","भरत","भरात","भारात","बहरत", ] }, { "ew" : "india", "hws" : [ "इंडिया","इन्डिया","इण्डिया","ईन्डिया","इनडिया", ] }, ]

第一个问题:到目前为止我做得对吗?因为在浏览器中它不显示最后一个" ] ",但是" ] " 存在于HTML 源中(不知道为什么会这样)。另外,当我尝试解析它时,使用(使用这种技术我可能错了):

var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string, dynamic>>(the_JSON_string);

它给我的错误说:

Invalid array passed in, extra trailing ','.

第二个问题:如果到目前为止我做得对,我可以得到一些帮助解析印地语单词吗?我应该采取什么方法最好使用System.Web.Script.Serialization;。最终我想获取印地语文本进行进一步处理。

请帮忙,谢谢。

【问题讨论】:

  • @SaberAmani 做到了。感谢您的建议。

标签: c# asp.net json rest unicode


【解决方案1】:

我认为你可以像下面这样删除最后一个逗号

  the_JSON_string =  the_JSON_string.Remove(the_JSON_string.LastIndexOf(','));

【讨论】:

    【解决方案2】:

    我会推荐 Json.Net 来解析 json 字符串。下面的代码(使用您的示例字符串)有效,您无需执行任何操作来取消转义这些字符。 Json 解析器将为您处理。

    string json = @"[ { ""ew"" : ""bharat"", ""hws"" : [ ""\u092D\u093E\u0930\u0924"",""\u092D\u0930\u0924"",""\u092D\u0930\u093E\u0924"",""\u092D\u093E\u0930\u093E\u0924"",""\u092C\u0939\u0930\u0924"", ] }, { ""ew"" : ""india"", ""hws"" : [ ""\u0907\u0902\u0921\u093F\u092F\u093E"",""\u0907\u0928\u094D\u0921\u093F\u092F\u093E"",""\u0907\u0923\u094D\u0921\u093F\u092F\u093E"",""\u0908\u0928\u094D\u0921\u093F\u092F\u093E"",""\u0907\u0928\u0921\u093F\u092F\u093E"", ] }, ]";
    
    dynamic obj = JsonConvert.DeserializeObject(json);
    MessageBox.Show(obj[0].hws[0].ToString());
    

    【讨论】:

    • 非常感谢。它完全有效。有没有办法知道 obj 的大小? obj.Length 不起作用。因为参数的数量可能很多,所以我可能想循环遍历。谢谢。
    • @DevDreamer 你可以写var length = obj.Count;foreach (var item in obj) { MessageBox.Show(item.hws[0].ToString()); }
    • 你能帮我解决这个问题吗? stackoverflow.com/questions/12095188/… 谢谢。
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2016-09-26
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    相关资源
    最近更新 更多