首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >语音识别 POST返回汉字乱码问题?

语音识别 POST返回汉字乱码问题?

提问于 2019-07-28 18:15:56
回答 2关注 0查看 465

用腾讯云 一句话识别 Java SDK 进行http连接时,返回汉字始终为乱码。

后将编码格式统一为utf-8后,识别结果却一直显示“嗯。嗯。嗯嗯嗯嗯嗯嗯“之类的,反正就只有“嗯,哦,啊”。

可是我的语音文件没有问题,在线测试是能准确识别的。应该还是Http连接过程中,哪里出现了问题,以至于收不到正确答案。

哪位大佬有遇到过类似问题,求解答。十分万分感谢!

附上代码:(主要内容集中在后半部分,从try{}开始,可以看到把各种字符集都设置为了UTF-8,但现在仍旧有未知问题。)

代码语言:js
复制
public static String sendVoice() {
        Map<String, String> reqMap = new TreeMap();
        reqMap.put("Action", "SentenceRecognition");
        reqMap.put("SecretId", SecretId);
        reqMap.put("Timestamp", toUNIXEpoch());
        reqMap.put("Nonce", toUNIXNonce());
        reqMap.put("Version", "2018-05-22");
        reqMap.put("ProjectId", "0");
        reqMap.put("SubServiceType", "2");
        reqMap.put("EngSerViceType", EngSerViceType);
        reqMap.put("SourceType", SourceType);
        if (SourceType.compareTo("0") == 0) {
            try {
                String Url = URLEncoder.encode(fileURI, "UTF-8");
                reqMap.put("Url", Url);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        } else if (SourceType.compareTo("1") == 0) {
            FileInputStream fileInputStream = null;
            try {
                fileInputStream = new FileInputStream(new File(fileURI));
                int datalen = fileInputStream.available();
                byte[] dataPacket = new byte[datalen];
                int n = fileInputStream.read(dataPacket);
                //System.out.println("n :"+n);
                String Data = Base64.getEncoder().encodeToString(dataPacket);
                String DataLen = datalen + "";
                // System.out.println("data len: "+DataLen);
                reqMap.put("Data", Data);
                reqMap.put("DataLen", DataLen);


            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            return "-3";
        }
        reqMap.put("VoiceFormat", VoiceFormat);
        String UsrAudioKey = getRandomString(16);
        reqMap.put("UsrAudioKey", UsrAudioKey);
        String _url = "POSTaai.tencentcloudapi.com/?";
        String signstr = formSignstr(_url, reqMap);
        // System.out.println("signstr: " + signstr);
        String signing = createSign(signstr, SecretKey);
        // System.out.println("签名: " + signing);
        String tmppostdata = formPostbody(reqMap);
        String sign = "";
        try {
            sign = URLEncoder.encode(signing, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        StringBuilder postdata = new StringBuilder(tmppostdata);
        postdata.append("Signature=");
        postdata.append(sign);
        String post = postdata.toString();
        //System.out.println("post : "+post);
        String serverUrl = "https://aai.tencentcloudapi.com";

        HttpURLConnection con = null;
        StringBuilder sbResult = new StringBuilder();
        try {
            URL url = new URL(serverUrl);
            con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setUseCaches(false);
            con.setRequestProperty("Host", "aai.tencentcloudapi.com");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setRequestProperty("Charset", "UTF-8");
            con.setRequestProperty("Accept-Charset", "UTF-8");
            con.setRequestProperty("contentType", "UTF-8");

            // 往服务器写入数据
            OutputStream out = con.getOutputStream();
            out.write(post.getBytes("UTF-8"));
            out.flush();

            // 接收服务器返回的数据
            InputStream in = con.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
            String line;// 每一行的数据
            while ((line = br.readLine()) != null) {
                sbResult.append(line);
            }
            System.out.println(sbResult.toString());
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if (con != null) {
                con.disconnect();
                con = null;
            }
        }
        //return "0";
        //return new String (sbResult.toString().getBytes(),"GBK");
        return sbResult.toString();
    }
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档