使用DeepL Java库翻译HTML时含JPG图片报错求助
问题描述
使用DeepL Java库翻译含HTML的文本时出现异常:
- HTML里带
.gif图片链接时翻译正常 - 带
.jpg图片链接时触发JsonSyntaxException报错
报错代码片段:
boolean failed = false; String translationResult = ""; try { TextResult result = translator.translateText( text, source, target, translationOptions ); translationResult = result.getText( ); } catch (IllegalStateException | JsonSyntaxException exception) { failed = true; exception.printStackTrace( ); Show.error( "failded"+ exception.getMessage( ) +"\n"+ exception.getCause( ) ); } if(failed) { Show.error( "failded" ); }
完整报错栈:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 13/10/2022 10:22:45,483 [AWT-EventQueue-0] ERROR [JBroker] User Message: faildedjava.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:225) at com.google.gson.Gson.fromJson(Gson.java:991) at com.google.gson.Gson.fromJson(Gson.java:956) at com.google.gson.Gson.fromJson(Gson.java:905) at com.google.gson.Gson.fromJson(Gson.java:876) at com.deepl.api.parsing.Parser.parseErrorMessage(Parser.java:47) at com.deepl.api.Translator.checkResponse(Translator.java:769) at com.deepl.api.Translator.translateText(Translator.java:174) at com.deepl.api.Translator.translateText(Translator.java:110) at com.upsilon.screens.translator.DeeplTranslator.translate(DeeplTranslator.java:75)
分析与解决方案
从报错栈能看出,问题出在DeepL库的Parser.parseErrorMessage方法:Gson尝试解析API响应时,得到的不是预期的JSON对象,而是纯字符串。这说明带.jpg的HTML触发了API返回非标准响应,导致解析失败。
1. 检查HTML中JPG链接的格式
确保.jpg链接是标准URL格式,没有未闭合标签、特殊字符转义错误等问题。比如:
- 错误写法:
<img src="test.jpg(缺失闭合引号) - 正确写法:
<img src="https://example.com/test.jpg" alt="示例图">
2. 升级DeepL Java库到最新版
旧版本库可能存在HTML元素解析的兼容性bug,尤其是处理图片链接的逻辑。替换成官方最新版本后再测试。
3. 预处理HTML中的JPG链接
翻译前先把.jpg替换成临时标记,翻译完成后再恢复,绕过API对.jpg的特殊处理:
// 预处理替换 String processedText = text.replace(".jpg", ".temp_jpg_tag"); // 执行翻译 TextResult result = translator.translateText(processedText, source, target, translationOptions); // 恢复原链接 translationResult = result.getText().replace(".temp_jpg_tag", ".jpg");
4. 优化异常处理,添加重试逻辑
针对此异常增加重试机制,避免单次响应异常导致翻译失败:
catch (IllegalStateException | JsonSyntaxException exception) { failed = true; // 重试一次 try { TextResult retryResult = translator.translateText(text, source, target, translationOptions); translationResult = retryResult.getText(); failed = false; } catch (Exception retryEx) { retryEx.printStackTrace(); Show.error("翻译失败:" + retryEx.getMessage()); } }
5. 检查TranslationOptions配置
确认tagHandling参数是否正确设置为html,确保库正确识别并处理HTML标签:
TranslationOptions options = new TranslationOptions(); options.setTagHandling("html");
内容的提问来源于stack exchange,提问作者lsa
相关产品推荐
相关产品推荐

