百度翻译乱码

百度翻译乱码

[ 一、问题描述:](# 一、问题描述:)
[二、解决方法](# 二、解决方法)

idea版本为2021.03版本,可供参考

一、问题描述:

在调用百度翻译api时,返回的翻译为一串奇怪的编码。

{"from":"en","to":"zh","trans_result":[{"src":"yellow","dst":"\u9ec4\u7684"}]}

翻译的原始单词为“yellow”,即返回的src字段,所以我们很容易知道dst字段就是翻译的中文结果,只是编码错误。


后续查阅相关资料:根据返回结果可知,“dst”:“\u9ec4\u7684"实际是"dst”:“黄的"的Unicode编码,它在UTF-8编码下的值就是”\u9ec4\u7684",因此这不是真正的乱码。如果你直接打印字符串,结果会显示为乱码,但这并不影响后续程序中该字符串的处理和工作。如果你想在控制台中以中文字符打印出该字符串,可以尝试调整控制台的编码格式。如果你想从这段返回结果中提取出翻译结果,可以使用json库对其进行解析。

感觉也有可能和idea的编码设置有关,后续有另外的解决方法我再进行补充。在此我先使用json库来解决

二、解决方法

使用json库进行翻译结果的解析。

  1. 首先给我们的项目导入json的jar包,具体方法可参考我另一篇博客。
    idea导入jar包
  2. 编写TransUtils类,对翻译的结果进行json解析。
    代码如下:

解释一下下面的代码,防止有些同学不懂。
方法getTrans的输入参数result,它接收原始unicode编码的翻译,也就是上面讲的{"from":"en","to":"zh","trans_result":[{"src":"yellow","dst":"\u9ec4\u7684"}]},这个方法的目的就是使用json来解析成中文。
return的dst参数,就是翻译后的正确中文显示。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class TransUtils {
    public static String getTrans(String result) {
        try {
            JSONObject jsonObject = new JSONObject(result);
            String from = jsonObject.getString("from");
            String to = jsonObject.getString("to");
            JSONArray transResults = jsonObject.getJSONArray("trans_result");
            String src = transResults.getJSONObject(0).getString("src");
            String dst = transResults.getJSONObject(0).getString("dst");
//            System.out.println("from:" + from);
//            System.out.println("to:" + to);
//            System.out.println("src:" + src);
//            System.out.println("dst:" + dst);
            return dst;
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return result;
    }
}
  1. Main主类调用这个方法获取中文显示。
    代码如下:
import com.baidu.translate.demo.TransApi;
import com.baidu.translate.demo.TransUtils;

public class Main {

    // 在平台申请的APP_ID 详见 http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer
    private static final String APP_ID = "***";
    private static final String SECURITY_KEY = "***";

    public static void main(String[] args) {
        TransApi api = new TransApi(APP_ID, SECURITY_KEY);

        String query = "yellow";
        String transResult = api.getTransResult(query, "auto", "zh");
        System.out.println(transResult);
        System.out.println(TransUtils.getTrans(transResult));

    }
 }
  1. 可以看到打印台显示的正确内容
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值