【问题标题】:How to correctly decode Google Translate API answers?如何正确解码 Google Translate API 答案?
【发布时间】:2010-11-04 10:13:47
【问题描述】:

我正在与 Google Translate API 通信。我可以发送我的请求并得到答复。唯一的问题是一些特殊字符被编码。例如:

时钟”(英文)将被翻译成“L'horloge”(法文)

API 将向我发送此文本 L\u0026#39;horloge。如何将这种情况转换为 unicode 字符串?

【问题讨论】:

    标签: delphi url decode google-translate


    【解决方案1】:

    它是 JSON unicode 和 HTML 编码。

    我建议你获取超级对象来解码 JSON: http://code.google.com/p/superobject/source/browse/#svn/trunk

    uses msxml, HTTPapp, superobject;
    var
      xml: IXMLHTTPRequest;
    begin
      xml := CoXMLHTTP.Create;
      xml.open('GET', 'http://www.googleapis.com/language/translate/v2?  key=YOURAPIKEYHERE&q=The%20clock&source=en&target=fr', False, EmptyParam, EmptyParam);
      xml.send('');
      Caption := HTMLDecode(SO(xml.responseText)  ['data.translations[0].translatedText'].AsString);
    end;
    

    【讨论】:

    • 这很好用:) 甚至不知道这个库。谢谢
    【解决方案2】:

    您可以使用以下函数对其进行解码:

    function unescapeUTF8EscapeSeq($str) {
        return preg_replace_callback("/\\\u([0-9a-f]{4})/i",
            create_function('$matches',
                'return html_entity_decode(\'&#x\'.$matches[1].\';\', ENT_QUOTES, \'UTF-8\');'
            ), $str);
    }
    

    如果你喜欢,可以试试here

    【讨论】:

    • 感谢您的建议,但这并不总是有效。 API 发送两种代码:Unicode(如“\u0026”或“\u0035”等)和 HTML(标签是 ASCII 代码如“#39”或 HTML 标签如“lt”或“gt”(其中代表 ))。
    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多