用腾讯云 一句话识别 Java SDK 进行http连接时,返回汉字始终为乱码。
后将编码格式统一为utf-8后,识别结果却一直显示“嗯。嗯。嗯嗯嗯嗯嗯嗯“之类的,反正就只有“嗯,哦,啊”。
可是我的语音文件没有问题,在线测试是能准确识别的。应该还是Http连接过程中,哪里出现了问题,以至于收不到正确答案。
哪位大佬有遇到过类似问题,求解答。十分万分感谢!
附上代码:(主要内容集中在后半部分,从try{}开始,可以看到把各种字符集都设置为了UTF-8,但现在仍旧有未知问题。)
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();
}
相似问题