最近做项目,要把发送短信的相关参数,抽取到配置文件中,遇到了中文乱码的问题。试了网上的一些方法,没解决。最后在看配置文件时,无意间看到拉取的配置文件里,注释都变成了ASCII码。我突发其想,把中文的配置文件,全部转成ASCII码写在配置文件里,居然解决了问题!!其中的原由还没去深究。这里只做些展示。
这是配置文件里的中文及运行时打印的日志
这里也贴出发送短信的方法
public BaseEntity sendCode(String userTel) {
String cacheCode = CaptchaUtils.generateCaptcha(6);
cacheCaptcha(userTel, cacheCode);
logger.info("进入页面前,收集电话时,发送短信{}", cacheCode);
String params[] = new String[] { cacheCode };
return sendSMS(userTel, params);
}
@Value("${***.message.url}")
private String messageUrl;
@Value("${***.message.api.key}")
private String messageKey;
@Value("${***.message.content}")
private String messageContent;
@Value("${***.message.sign.name}")
private String messageSignName;
private BaseEntity sendSMS(String toMobile, Object[] params) {
try {
HttpPost httpPost = new HttpPost(messageUrl);
httpPost.addHeader(HttpHeaders.AUTHORIZATION,
"Basic " + new String(Base64.encodeBase64(("api:" + messageKey).getBytes()), "utf-8"));
List<NameValuePair> list = new ArrayList<>();
list.add(new BasicNameValuePair("mobile", toMobile));
String smsContent = String.format(messageContent, params) + " 【" + messageSignName + "】";
logger.info("短信配置内容{}", smsContent);
list.add(new BasicNameValuePair("message", smsContent));
httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
CloseableHttpClient client = HttpClients.createDefault();
CloseableHttpResponse response = client.execute(httpPost);
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity, "UTF-8");
response.close();
JSONObject obj = JSONObject.parseObject(body);
int errorCode = obj.getIntValue("error");
if (errorCode != 0) {
logger.info("短信发送失败");
return new BaseEntity(HttpStatus.FAIL);
}
logger.info("短信发送成功");
return new BaseEntity(HttpStatus.SUCCESS);
} catch (Exception e) {
e.printStackTrace();
return new BaseEntity(HttpStatus.FAIL);
}
}
public static String generateCaptcha(int num) {
String chars = "0123456789";
char[] rands = new char[num];
for (int i = 0; i < num; i++) {
int rand = (int) (Math.random() * 10);
rands[i] = chars.charAt(rand);
}
return String.valueOf(rands);
}