lsj9383 / translate-set

the utils for translation
186 stars 46 forks source link

对长句支持不佳 #1

Closed wzyddg closed 7 years ago

wzyddg commented 7 years ago

我在GoogleDispatch类的私有构造函数GoogleDispatch()里加了一句langMap.put("ru", "ru");来翻译俄语,效果喜人,但是在遇到长句的时候,抛出了异常如下: Exception in thread "main" net.sf.json.JSONException: A JSONArray text must start with '[' at character 1 of <!DOCTYPE html>

Error 400 (Bad Request)!!1

400. That’s an error.

Your client has issued a malformed or illegal request. That’s all we know. at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:499) at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:1116) at net.sf.json.JSONArray._fromString(JSONArray.java:1197) at net.sf.json.JSONArray.fromObject(JSONArray.java:127) at net.sf.json.JSONArray.fromObject(JSONArray.java:105) at com.lsj.trans.GoogleDispatch.ParseString(GoogleDispatch.java:69) at com.lsj.trans.GoogleDispatch.Trans(GoogleDispatch.java:64) 我觉得是返回的网页 报错所以解析失败。 我用的例句: Внатуре, спасибо тебе, братан. Короче, приходил сюда один такой сталкер, ну... мы с ним ничего не делали, честно. Он спустился к нам на базу к трубам вниз, так тут откуда-то кровосос взялся, да напал на наших людей, уволок двоих туда в логово двоих, включая его. Братана моего покоцало, я его сюда вытащил, кровь никак не остановить. Если ищешь его, спускайся вниз, только будь осторожен, опасайся той твари.

lsj9383 commented 7 years ago

您好,请问问题是否已经解决?在我的环境下并无问题。(您的例句转中文还是转英文都是可以的) 我的运行ide是:

Eclipse IDE for Java Developers

Version: Neon.1a Release (4.6.1)

如果您的工程还有问题并亟待解决,可以将您的工程文件发送至99449107@qq.com,我尝试帮您解决。

wzyddg commented 7 years ago

没有解决 我的环境: Eclipse Java EE IDE for Web Developers. Version: Neon.1a Release (4.6.1)

java version "1.8.0_77"

其他java项目都可以正常跑。 我只在GoogleDispatch()里加了langMap.put("ru", "ru");在Main类main函数里的TransInit();之后调用 System.out.println(Dispatch.Instance("google").Trans("ru", "zh", "Внатуре, спасибо тебе, братан. Короче, приходил сюда один такой сталкер, ну... мы с ним ничего не делали, честно. Он спустился к нам на базу к трубам вниз, так тут откуда-то кровосос взялся, да напал на наших людей, уволок двоих туда в логово двоих, включая его. Братана моего покоцало, я его сюда вытащил, кровь никак не остановить. Если ищешь его, спускайся вниз, только будь осторожен, опасайся той твари."));

其他都没有改动过了,我在我的windows电脑和mac上都试过,相同异常。 改用百度的翻译就可以成功。

lsj9383 commented 7 years ago

您好,在您的工程里面,GoogleDispatch.Trans方法中,应该会判断字符长度然后选择get或是post的方式发送参数,请将这个地方修改为不作判断,始终采用post的方式发送。即

@Override
    public String Trans(String from, String targ, String query) throws Exception{

        HttpParams params = null;
        params = new HttpPostParams();      //统一采用post,若字符长度小于999用get也可以的

或者参考新push的源码

wzyddg commented 7 years ago

解决了,猜测是俄文字符串在进行URL编码前长度在999之下(例句为408),使程序选择了GET方式,而URL编码后的长度却很长超过了GET请求的最大长度(仅例句编码后为2031)。谢谢作者的帮助。

lsj9383 commented 7 years ago

不客气。过年了也不休息休息,预祝新年快乐。

wzyddg commented 7 years ago

也祝你新年快乐。不过现在因为请求过于频繁触发了人机验证,谷歌接口暂时不让我调了。请问您知道多久才能恢复?以后以多低的频率调用才不会被封吗?

lsj9383 commented 7 years ago

他怎么提示你的?老实说我还没遇到这个情况,所以也不太清楚。翻译我也只是偶尔用,用的并不频繁。

wzyddg commented 7 years ago

返回的结果不是JSON,是这个网页:

302 Moved

302 Moved

The document has moved here.

点进去链接就让我进行人机验证。没办法了,好像只能等着了。