在项目中,总是难以避免url中带中文的情况.
后台生成的Url中带有中文:
则中文值应该用URLEncoder.encode进行编码
serviceName = URLEncoder.encode(serviceName,"utf-8");
private String makeReturnUrl(String pString, String Dstring, String yString, String serviceName, String serviceId) throws ItrusException{
long time = System.currentTimeMillis();
String text = pString + Dstring + yString + time ;
String hmacByOurs = MD5.sign(text, appSecretOurls, "utf-8");
if (StringUtils.isNotBlank(serviceName)) {
try {
serviceName = URLEncoder.encode(serviceName,"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (StringUtils.isNotBlank(serviceId)) {
try {
serviceId = URLEncoder.encode(serviceId,"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String url = "?pes=" + pString +
"&des=" + Dstring +
"&yfs=" + yString +
"×tamp=" + time +
"&sec=" + hmacByOurs +
"&sen=" + serviceName +
"&sei=" + serviceId;
return url;
}
生成的链接
http://127.0.0.1:8080/xxxx/from?pes=157&des=158&yfs=161×tamp=1527579010896&sec=f4e9ce5f1ecf86941db3495089a3f8fa&sen=%E6%B5%8B%E8%AF%95%E4%B8%9A%E5%8A%A1%E5%90%8D%E7%A7%B0&sei=%E6%B5%8B%E8%AF%95%E4%B8%9A%E5%8A%A1%E7%BC%96%E5%8F%B7001
在tomcat中设置uri的编码方式
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />